Python11_文件的读写
1、打开和关闭文件(文件对象的方法open,close)
各个参数的细节如下:
- file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
- access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
- buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
close()方法
File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。
语法:
fileObject.close()
====================================================
2、读取和写入文件(文件对象的方法)
operation | details |
---|---|
f.read(size=-1) | 读入全部内容,如果给出参数,读入前size长度 |
f.readline(size=-1) | 读入一行内容,如果给出参数,读入该行前size长度 |
f.readlines(hint=-1) | 读入文件所有行,以每行为元素形成列表,如果给出参数,读入前hint行 |
f.write(s) | 向文件写入一个字符串或字节流 |
f.writelines(lines) | 将一个元素全为字符串的列表写入文件 |
f.seek(offset) | 改变当前文件操作指针的位置,offset含义如下:0 – 文件开头; 1 – 当前位置; 2 – 文件结尾 |
====================================================
3、重命名和删除文件(不是文件对象的方法)
Python os模块提供用于执行文件处理操作(如重命名和删除文件)的方法。
要使用此模块,需要先将它导入,然后可以调用任何相关的函数。
rename()方法
rename()
方法有两个参数,即当前的文件名和新的文件名。
语法
os.rename(current_file_name, new_file_name)
示例
以下是一个将现有文件test1.txt
重命名为test2.txt
的示例 -
#!/usr/bin/python3
import os
# Rename a file from test1.txt to test2.txt
os.rename( "test1.txt", "test2.txt" )
remove()方法
使用remove()
方法并通过提供要删除的文件的名称作为参数来删除文件。
语法
os.remove(file_name)
示例
以下是删除现有文件test2.txt
的示例 -
#!/usr/bin/python3
import os
# Delete file test2.txt
os.remove("text2.txt")
此外Python的os模块还提供对目录的操作:
创建、改变、删除目录
====================================================
3、一种新的文件打开方式(codecs模块):
当我面有数据需要保存时,第一时间一般会想到写到一个txt文件中,
当然,数据量比较大的时候还是写到数据库比较方便管理,
需要进行网络传输时要序列化,json化。
下面主要整理一下平时用的最多的写入到文件中,一般以txt结尾,linux里不会以后缀来区分文件类型,后缀可以随便,也可以没有。
python读写文件估计大家都用open内置函数,或者file这个工厂函数,这两个的效果基本一样。
打开文件的方式:
一般为:f=open(file_name,access_mode = 'r',buffering = -1)。
file_name就是文件的路径加文件名字,不加路径则文件会存放在python程序的路径下,
access_mode就是操作文件的模式,主要有r,w,rb,wb等,细节网上一大堆,
buffering = -1是用于指示访问文件所采用的缓存方式。0表示不缓存;1表示只缓存一行,n代表缓存n行。如果不提供或为负数,则代表使用系统默认的缓存机制。
打开以后就是写和读的操作。但是用open方法打开会有一些问题。
open打开文件只能写入str类型,不管字符串是什么编码方式。
例如
>>> fr = open('test.txt','a')
>>> line1 = "我爱祖国"
>>> fr.write(line1)
这样是完全可以的。但是有时候我们爬虫或者其他方式得到一些数据写入文件时会有编码不统一的问题,所以就一般都统一转换为unicode。
此时写入open方式打开的文件就有问题了。
例如
>>> line2 = u'我爱祖国'
>>> fr.write(line2)
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
fr.write(line2)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range(128)
>>>
怎么办,我们可以将上面的line2编码成str类型,但是太麻烦。
我们要把得到的东西先decode为unicode再encode为str。。。
//这段表述有问题,应将其他编码方式的bytes对象decode为unicode的str,再用utf-8的方式encode为bytes对象
input文件(gbk, utf-8...) ----decode-----> unicode(str) -------encode------> output文件(gbk, utf-8...)
//python3中str都是unicode类型
代替这繁琐的操作就是codecs.open,
例如
>>> import codecs
>>> fw = codecs.open('test1.txt','a','utf-8')
>>> fw.write(line2)
>>>
不会报错,说明写入成功。这种方法可以指定一个编码打开文件,使用这个方法打开的文件读取返回的将是unicode。
写入时,如果参数 是unicode,则使用open()时指定的编码进行编码后写入;
如果是str,则先根据源代码文件声明的字符编码,解码成unicode后再进行前述 操作。
相对内置的open()来说,这个方法比较不容易在编码上出现问题。
====================================================
文件对象属性
打开一个文件并且有一个文件对象后,可以获得与该文件相关的各种信息。
以下是与文件对象相关的所有属性的列表 -
编号 | 属性 | 描述 |
---|---|---|
1 | file.closed |
如果文件关闭则返回true ,否则返回false 。 |
2 | file.mode |
返回打开文件的访问模式。 |
3 | file.name |
返回文件的名称。 |
总结:
对于文件的操作主要分:
1、文件对象的方法
2、os对象的方法
更多详细细节可以根据实际情况自行查阅
====================================================
参考链接:
Python文件I/O:https://www.runoob.com/python/python-files-io.html
Python文件操作的总结:https://www.cnblogs.com/tzhao/p/9855232.html
Python文件读写:https://www.yiibai.com/python/python_files_io.html
Python文件的读写和追加操作:https://www.cnblogs.com/houyan-jessica/p/9492289.html