python-文件操作
文件操作也就读操作和写操作了,我们一个一个来说。。
读文件操作
其实和在日常我们在使用文件时是一样的,不过读文件还是写文件,第一件事情就是打开文件。
fileRead = open('/test.txt' , 'r') #r 表示打开文件的格式是读模式
open()是Python的内置函数,如果文件不存在会抛出异常“IOerror”。
一般情况下,小文件可以直接使用read()方法读取,一次将文件的内容全部读到内存中,返回的是 str 类型。
但有时候文件内容可能会很大,如果一次性读入内存会卡死的,这个时候就可以使用 read(size) 或者 readline()。 size 指定每次读取的字节数。通过多次循环获取文件的全部内容。
for line in fileRead.readlines(): #逐行读取 print(line)
最后,一定不要忘记关闭文件。切记切记切记!
fileRead.close()
写文件操作
类似读模式,写文件打开文件时也需要定义为w(写)模式,但是此时的打开文件并不是真正意义上的打开,而是创建一个新的文件,如果之前存在此文件名,原文件将被现文件覆盖。
loginFile = open("login.txt", "w") loginFile.write("写入第一行\n") loginFile.write("写入第二行\n") loginFile.close()
此时打开login.txt文件,发现以前的内容已没有,内容如下:
写入第一行
写入第二行
那有人问了,我怎么更新文件。当然,Python提供的模式还有一个叫追加(a)模式。此模式下write()的内容都会更新原有内容之后。
loginFile = open("login.txt", "a") loginFile.write("写入第3行\n") loginFile.close()
此时再打开login文件你就会看到:
写入第一行
写入第二行
写入第3行
但是,如果要修改文件我该怎么办了,有没有这种模式呢。呵呵。。当然--没有的。那么怎么修改呢,那只能先修改到一个中间文件中,然后再写回来了。代码如下:
1 loginFile = open("login.txt", "r") # 打开原文件 2 loginFileUpdate = open("loginUpdate.txt", "w") #创建一个中间文件 3 for line in loginFile: 4 if userName in line: #找到修改位置进行修改 5 line = 'I am newUser' 6 loginFileUpdate.write(line) 7 loginFile.close() 8 loginFileUpdate.close() 9 #将中间文件的内容回写到原配置文件 10 loginFile = open("login.txt", "w") 11 loginFileUpdate = open("loginUpdate.txt", "r") 12 for line in loginFileUpdate: 13 loginFile.write(line) 14 loginFile.close() 15 loginFileUpdate.close()
不同模式打开文件的完全列表:
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
file对象相关的所有属性的列表:
属性 | 描述 |
---|---|
file.closed | 返回true如果文件已被关闭,否则返回false。 |
file.mode | 返回被打开文件的访问模式。 |
file.name | 返回文件的名称。 |
file.softspace | 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。 |