一、打开文件
在python中使用open()这个函数打开文件,并返回文件对象
open(file,mode = 'r',buffering=-1,encoding=None)
file: 代表传入的文件名,如果只有文件名,不带路径,python会在当前文件夹找该文件并打开
mode:指定打开文件的模式
常见的文件打开模式:
打开模式 | 执行操作 |
---|---|
'r' | 以只读的方式打开(默认) |
'w' | 以写入的方式打开文件,会覆盖已存在的文件 |
'a' | 以写入的模式打开,如果文件存在,则在末尾追加写入 |
'b' | 以2进制的模式打开 |
'+' | 可读写模式(可添加到其他模式中使用) |
't' | 以文本模式打开(默认) |
‘b’
模式改变处理文件的方法。一般来说,Python 假定处理的是文本文件(包含字符)。通常这样做不会有任何问题。但如果的是一些其他类型的文件(二进制文件),比如声音剪辑或者图像,那么应该在模式参数中增加’b’。
二、文件对象的方法
文件对象的方法 | 执行操作 |
---|---|
close() | 关闭文件 |
read(size=-1) | 从文件中读取size个字符,当未给定size或给定负值时,读取剩余的所有字符,然后作为字符串返回 |
readline() | 从文件中读取一整行字符串 |
write(str) | 将字符串str写入文件 |
writelines(seq) | 向文件写入字符串序列seq,seq应是一个返回字符串的可迭代对象 |
seek(offset,from) | 在文件中移动指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾) 偏移offset个字节 |
tell() | 返回当前在文件中的位置 |
#示例
#打开文件,写入字符串,并关闭文件
# 如果打开绝对路径补全反斜杠:
# file = open('D:\\test_input.txt','r+')
f = open('test.txt','w+')
f.write('this is a test')
f.close()
#读取文件
f = open('test.txt')
f.read() #返回结果:'this is a test'
#返回当前在文件中的位置
f.tell() #返回结果:14
#使用seek()方法调整当前指针位置至文件起始位置
f.seek(0,0)
#返回当前文件中的位置
f.tell() #返回结果:0
三、一个简单小任务
将 test.txt 中的三段对话数据进行分割,将man的的对话单独保存为man_.txt 的文件(去掉man:),将woman的的对话单独保存为 woman_.txt的文件(去掉woman:),使用‘= = = =’进行分割
man:I am a man
woman:I am a woman
= = = = = = = = = = = = = = = = = =
man:I like python
woman:I like python too
= = = = = = = = = = = = = = = = = =
man:you are beautiful
woman:Thank you
分割函数:
split(str='',num)
分割函数,str代表分割符,num代表分割的次数
count = 1
man = []
woman = []
f = open('test.txt','r')
for each_line in f:
if each_line[:11] != '= = = = = =':
#此处注意[:11]与选取的值对应
#split(str=“”,num)分割函数,str代表分割符,num代表分割的次数
(role, line_spoken) = each_line.split(':', 1)
if role == "man":
man.append(line_spoken)
if role == "woman":
woman.append(line_spoken)
else:
file_name_man = 'man_' + str(count) + '.txt' #创建文件man_count.txt
file_name_woman = 'woman_' + str(count) + '.txt' #创建文件woman_count.txt
man_file = open(file_name_man, 'w')
woman_file = open(file_name_woman, 'w')
man_file.writelines(man) #写入的字符串占据一整行
woman_file.writelines(woman)
man = []
woman = []
count = count + 1
file_name_man = 'man_' + str(count) + '.txt'
file_name_woman = 'woman_' + str(count) + '.txt'
man_file = open(file_name_man, 'w')
woman_file = open(file_name_woman, 'w')
man_file.writelines(man)
woman_file.writelines(woman)
man_file.close()
woman_file.close()
f.close()
优化分割函数:
def save_file(man, woman, count):
file_name_man = "man_" + str(count) + ".txt" # 创建文件man_count.txt
file_name_woman = "woman_" + str(count) + ".txt" # 创建文件woman_count.txt
man_file = open(file_name_man, 'w')
woman_file = open(file_name_woman, 'w')
man_file.writelines(man) # writelines(seq)-向文件写入字符串序列seq,
man_file.writelines(woman)
man_file.close()
woman_file.close()
def split_file(file_name):
count = 1
man = []
woman = []
f = open(file_name)
for each_line in f:
if each_line[:11] != '= = = = = =':
(role, line_spoken) = each_line.split(':', 1)
if role == "man":
man.append(line_spoken)
if role == "woman":
woman.append(line_spoken)
else:
save_file(man, woman, count)
man = []
woman = []
count += 1
save_file(man, woman, count)
f.close()
split_file('test.txt')