0%

python小菜鸟备忘录:怎么读取/写入文档

总是忘记怎么读取/写入文档……然后发现原先写在jupyter的所有python和R的笔记都没了……所以痛定思痛,还是自己写在自己博客上靠谱呜呜


打开文件

1
f = open(file, mode='r') #file为文件路径(绝对/相对)

这是最基本的读取文件方式,其他的变形为:

  • encoding = none 为默认,其他常用的为utf8
  • mode一共有好几种,这里列几种常用的
模式 描述
x 写模式,新建一个文件,如果该文件已存在则会报错。
r 以只读方式打开文件。文件的指针将会放在文件的开头。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

关闭文件

要打开文件就一定要相对应的关闭文件

1
2
#关闭文件
f.close()

读取文件

读取文件首先模式要选对,其次是不同的函数

1
2
3
4
5
6
f.read([size]) #返回size数量的字节数 如果未给定或为负则读取所有。
f.readline() #读取整行,包括 "\n" 字符。如果不想要\n的话可以f.readline().strip()
f.readlines() #读取所有行,返回包含所有行以及\n的列表

#note:返回的都是string
string = f.read()

常用的是readlines(),即依次读取每行信息(且不返还列表)

1
2
3
for line in f.readlines():   #依次读取每行  
line = line.strip() #去掉每行头尾空白
print "读取的数据为: %s" % (line)

设置指针位置

一般打开文件默认指针在开头或结尾,如果想到其他位置可以设置指针。

语法为:fileObject.seek(offset[, whence])

  • offset: 开始的偏移量,也就是代表需要移动偏移的字节数
  • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -1。

一些常用的:

1
2
3
f.seek(0,0) #重新设置文件读取指针到开头
f.seek(0,2) #重新设置文件读取指针到末尾
f.tell() #返回文件当前位置

写入文件

1
2
3
4
5
6
f.write(str) #写入字符串
f.writelines([list of strings]) #写入多行字符串,但是如需换行需要自己加换行符

#栗子
seq = ["test 1\n", "test 2"]
f.writelines(seq)

其他

1
2
f.name #返回文件名
f.truncate([size]) #截断文件

Reference

菜鸟教程