程序员的术与道:术
1.文件基本知识
不论你编程还是编程,只要你使用电脑,就一定会跟文件打交道。所有与计算机有关的东西,都很难绕过文件,或多或少会同文件进行转换。
而你能不能用编程来操作文件是区别于程序员和普通人的重要标志。
使用过计算机的人都对文件有一个大体的印象,对于以下的文件基本操作也基本熟悉。
打开文件关闭文件读取文件写入文件移动文件删除文件创建文件创建文件夹下面就说明C语言和python语言是如何操作文件的。
2.C语言文件基本操作
前面已经有过一篇专门介绍C语言文件操作的文章,此处只做简单的介绍。
c语言文件操作一般有两种方式,一种是使用标准库,另外一种是使用系统库。但系统库根据不同的操作系统平台有所不同,此处指介绍标准库的文件操作。
打开文件
```c
//pname:是一个字符指针,它将指向要打开或建立的文件的文件名字符串。
//mode:是一个指向文件处理方式字符串的字符指针
//正常返回:被打开文件的文件指针。
//异常返回:NULL,表示打开操作不成功。
FILE *fopen(char *pname,char *mode);
```
关闭文件 ```c
//fp:一个已打开文件的文件指针
//正常返回:0。
//异常返回:EOF,表示文件在关闭时发生错误
int fclose(FILE *fp);
```
读取文件 ```c
//从文件中读取一个字符
int fgetc(FILE *fp);
//从文件中读取一个字符串
char *fgets(char *str,int n,FILE *fp);
//以二进制形式读取文件中的数据
//从由fp指定的文件中,按二进制形式将sife*count个数据读到由buffer指出的数据区中
int fread(void *buffer,unsigned sife,unsigned count,FILE *fp);
```
写入文件
```c
//将一个字符写入到文件中
int fputc(int ch,FILE *fp);
//将一个字符串写入到文件中
int fputs(char *str,FILE *fp);
//往文件中写格式化数据
int fprintf(FILE *fp,char *format,arg_list);
//以二进制形式写数据到文件中去
//按二进制形式,将由buffer指定的数据缓冲区内的sife*count个数据写入由fp指定的文件中去
int fwrite(void *buffer,unsigned sife,unsigned count,FILE *fp);
```
移动文件 标准库没有提供移动文件的函数,你需要新建一个文件,把原文件的内容一个个读过来,然后删除原文件。
删除文件
```c
//filename为要删除的文件名,可以为一目录。如果参数filename 为一文件,则调用unlink()处理;
//若参数filename 为一目录,则调用rmdir()来处理
int remove(char * filename);
```
创建文件 ```c
//同文件打开,但需要指定mode为写模式
FILE *fopen(char *pname,char *mode);
```
3.python文件基本操作
C语言的文件操作往往更原始,除非有特殊要求,不然一般不推荐使用C语言操作文件。一般推荐使用python操作文件,因为python封装的接口更加简单易用。
关闭文件用Python内置的open()函数打开一个文件,创建一个文件对象,再用相关的方法才可以调用它进行读取。
```python
//file_name变量是一个包含了你要访问的文件名称的字符串值
//access_mode决定了打开文件的模式:只读,写入,追加等(默认为追加)
//如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。
//如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
file object = open(file_name,access_mode,buffering)
```
File对象的属性一个文件打开后,其实就是创建了一个文件对象,该对象保存了文件的具体信息,具体如下:
```python
fp=open("1.txt","wb")
```
属性描述file.closed关闭文件,成功返回true;刷新暂停里任何还没写入的信息,并关闭该文件文件模式返回被打开文件的访问模式文件名返回文件的名称
文件的读写操作
写()write()方法可将任何字符串写入一个打开的文件。
读()阅读()方法从一个打开的文件中读取一个字符串。
readline()f.readline()如果返回一个空字符串,说明已经已经读取到最后一行。f.readline()会从文件中读取单独的一行。
readlines()f.readlines()将以列表的形式返回该文件中包含的所有行,列表中的一个表示文件的一行。如果设置可选参数sizehint,则重新指定长度的字节,并将这些字节按行分割。
文件的定位操作tell()方法获取文件的当前位置;
查找(偏移量,来自)方法改变当前文件的位置。偏移量表示要移动的字节数,从变量指定开始移动字节的参考位置。如果从被设置为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
文件的重命名和删除
rename() // rename()方法需要两个参数,当前的文件名和新文件名。
os.rename(current_file_name,new_file_name)
removeos.remove(file_name
python目录操作
mkdir()mkdir()创建新目录。
chdir()chdir()方法改变当前的目录。
getcwd()getcwd()获取当前目录。
rmdir()rmdir()方法删除目录,目录名称以参数传递。在删除这个目录之前,它的所有内容应该先被清除。
4.总结
file.colse()关闭文件file.flush()刷新文件内部缓冲,直接将内部临时的数据写入文件file.fileno()——返回整型文件尺寸file.isatty()——文件是否连接到终端file.next()——返回文件下一行file.read(大小)——从文件读取指定的字节数,若未给定或为负则读取所有file.readline(大小)——读取整行,包括“ n”字符file.readlines(大小)——读取所有行并返回列表file.seek ——(偏移量,因此)设置文件当前位置file.tell()——获取当前位置file.truncate(大小)从当前位置截取大小字节的字符file.write()——将串口写入文件file.writelines(顺序)——向文件写入一个序列字符串列表