下面介绍文件的一些基本操作
打开文件:
file_object = open(file_name, access_mode=’r’, buffering=-1)
file_name:是包含要打开的文件名字的字符串, 它可以是相对路径或者绝对路径.
access_mode:是一个代表打开文件模式的字符串,下表是字符串的枚举及含义。
文件模式 | 操作 |
---|---|
r | 以读方式打开 |
rU 或 Ua | 以读方式打开, 同时提供通用换行符支持 (PEP 278) |
w | 以写方式打开 (必要时清空,不存在时则创建新文件) |
a | 以追加模式打开 (从 EOF 开始, 必要时创建新文件) |
r+ | 以读写模式打开 |
w+ | 以读写模式打开 (参见 w ) |
a+ | 以读写模式打开 (参见 a ) |
rb | 以二进制读模式打开 |
wb | 以二进制写模式打开 (参见 w ) |
ab | 以二进制追加模式打开 (参见 a ) |
rb+ | 以二进制读写模式打开 (参见 r+ ) |
wb+ | 以二进制读写模式打开 (参见 w+ ) |
ab+ | 以二进制读写模式打开 (参见 a+ ) |
buffering:其中 0 表示不缓冲, 1表示只缓冲一行数据, 任何其它大于 1 的值代表使用给定值作为缓冲区大小. 不提供该参数或者给定负值代表使用系统默认缓冲机制
先介绍下os模块的一些属性吧
现在三种主流操作系统的换行符及路径分格符都不尽相同,os模块会根据不同的操作系统得到对应的值
os.linesep 代表换行符
下面来实际操作下吧:
#!/usr/bin/env python
"文件操作"
import os
#以读写方式打开文件
fobj = open('test.txt','w+')
if (fobj.writable()):
# write 向文件中写入字符串
# 该方法会返回写入的字符数
fobj.write('I am HanMeiMei%s' % os.linesep)
fobj.write('I love you %s' % os.linesep)
# writelines 向文件中写入列表的所有数据,也可以是一个字符串
fobj.writelines('writelines %s' % os.linesep)
fobj.writelines([
'writelines1 %s' % os.linesep,
'writelines2 %s' % os.linesep,
])
if (fobj.readable()):
# 注意:写文件的时候要慎重用seek
# 文件的字符数
print('写入文件的字符为' % fobj.tell())
# 移动文件指针到文件的起始位置
if (fobj.seekable()):
fobj.seek(0)
# 读取文件全部内容 read 中可以传入要读取的字符数
print('文件的内容为:%s' % fobj.read())
# 如果还想继续读取文件就需要移动文件指针到文件的起始位置
if (fobj.seekable()):
fobj.seek(0)
# 读取第一行文件
print('第一行的内容为: %s' % fobj.readline())
# 将第二行到文件末尾的内容读入到列表中
print('读到文件的列表为:%s' % fobj.readlines())
# 还有一种最高效的办法是进行文件的迭代
if (fobj.seekable()):
fobj.seek(0) #移动文件指针到文件的起始位置
for line in fobj:
print(line,end='')
# 为什么没有调用flush呢,其实 seek 和 tell 都会将缓冲区的数据写入文件的
# 文件的属性
fname = fobj.name # 文件名
fencoding = fobj.encoding # 文件的字符集
fclose = fobj.closed #文件是否已关闭
fmode = fobj.mode #文件的打开模式
fnewlines = fobj.newlines #文件的换行符
ferrors = fobj.errors # 文件的错误级别