您的位置:首页 > 编程语言 > Python开发

python3.6—将文件(record.txt)中的数据进行分割并分别保存(附录:文件打开模式,文件对象方法以及字符串使用及注释)

2018-12-30 16:18 651 查看

分割要求:

        1.读入record.txt文件中的数据内容

        2.将boy的对话单独保存到名为“boy_count.txt”的文件中

        3.将girl的对话单独保存到名为“girl_count.txt”的文件中

        4.文件中共有三段对话(最后一段无=分割符),分别保存为boy_1.txt,girl_1.txt,boy_2.txt,girl_2.txt,boy_3.txt,girl_3.txt共6个文件(其中,文件中不同对话间使用“=========”分割)

源代码如下:

[code]f=open('F://recode.txt')

boy=[]
girl=[]
count=1

for each_line in f:
if each_line[:3] !='===':  #判断是否有分隔符
(role,line_spoken)=each_line.split(':',1)#txt文档中的冒号需是英文格式,否则报错
if role=='小明':
boy.append(line_spoken)
if role=='小红':
girl.append(line_spoken)
else:
file_name_boy='boy_'+str(count)+'.txt'
file_name_girl='girl'+str(count)+'.txt'
boy_file=open(file_name_boy,'w')#以写入方式打开文件
girl_file=open(file_name_girl,'w')
boy_file.writelines(boy)#向文件中写入字符串序列
girl_file.writelines(girl)
boy_file.close()
girl_file.close()
boy=[]
girl=[]
count+=1
file_name_a = 'boy_' + str(count) + '.txt'#由于第3段后无分隔符,所以单独写入
file_name_b = 'girl_' + str(count) + '.txt'

a_file = open(file_name_a, 'w')
b_file = open(file_name_b, 'w')

a_file.writelines(boy)
b_file.writelines(girl)

a_file.close()
b_file.close()

f.close()

优化如下:

[code]#实质是将重叠部分用函数表示:
def save_file(boy,girl,count):
file_name_boy = 'boy_' + str(count) + '.txt'
file_name_girl = 'girl' + str(count) + '.txt'
boy_file = open(file_name_boy, 'w')
girl_file = open(file_name_girl, 'w')
boy_file.writelines(boy)
girl_file.writelines(girl)
boy_file.close()
girl_file.close()
f=open('F://recode.txt')
boy=[]
girl=[]
count=1
for each_line in f:
if each_line[:3] !='===':
(role,line_spoken)=each_line.split(':',1)
if role=='小明':
boy.append(line_spoken)
if role=='小红':
girl.append(line_spoken)
else:
save_file(boy,girl,count)
boy=[]
girl=[]
count+=1
save_file(boy, girl, count)#保存第三部分
f.close()

附录:

文件打开模式                                执行操作
         'r' 以只读方式打开文件(默认)
        'w' 以写入的方式打开文件,会覆盖已存在的文件
        'x' 如果文件已经存在,使用此模式打开将引发异常
        'a' 以写入模式打开,如果文件存在,则在末尾追加写入
        'b' 以二进制模式打开文件
        't' 以文本模式打开(默认)
        '+' 可读写模式(可添加到其他模式中使用)
        'U' 通用换行符支持
          文件对象方法                                    执行操作
f.close() 关闭文件
f.read([size]) 从文件读取size个字符,当未给定size或给定负值的时候,读取剩余的所有字符,然后作为字符串返回
f.readline([size]) 从文件中读取并返回一行(包括行结束符),如果有size有定义则返回size个字符
f.write(str) 将字符串str写入文件
f.writelines(seq) 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象
f.seek(offset, from) 在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节
f.tell() 返回当前在文件中的位置
f.truncate([size=file.tell()]) 截取文件到size个字节,默认是截取到文件指针当前位置
              字符串                                                      注释
capitalize() 把字符串的第一个字符改为大写
casefold() 把整个字符串的所有字符改为小写
center(width) 将字符串居中,并使用空格填充至长度 width 的新字符串
count(sub[, start[, end]]) 返回 sub 在字符串里边出现的次数,start 和 end 参数表示范围,可选。
encode(encoding='utf-8', errors='strict') 以 encoding 指定的编码格式对字符串进行编码。
endswith(sub[, start[,end]]) 检查字符串是否以 sub 子字符串结束,如果是返回 True,否则返回 False。start 和 end 参数表示范围,可选。
expandtabs([tabsize=8]) 把字符串中的 tab 符号(\t)转换为空格,如不指定参数,默认的空格数是 tabsize=8。
find(sub[, start[, end]]) 检测 sub 是否包含在字符串中,如果有则返回索引值,否则返回 -1,start 和 end 参数表示范围,可选。
index(sub[, start[, end]]) 跟 find 方法一样,不过如果 sub 不在 string 中会产生一个异常。
isalnum() 如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False。
isalpha() 如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False。
isdecimal() 如果字符串只包含十进制数字则返回 True,否则返回 False。
isdigit() 如果字符串只包含数字则返回 True,否则返回 False。
islower() 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回 True,否则返回 False。
isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False。
isspace() 如果字符串中只包含空格,则返回 True,否则返回 False。
istitle() 如果字符串是标题化(所有的单词都是以大写开始,其余字母均小写),则返回 True,否则返回 False。
isupper() 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False。
join(sub) 以字符串作为分隔符,插入到 sub 中所有的字符之间。
ljust(width) 返回一个左对齐的字符串,并使用空格填充至长度为 width 的新字符串。
lower() 转换字符串中所有大写字符为小写。
lstrip() 去掉字符串左边的所有空格
partition(sub) 找到子字符串 sub,把字符串分成一个 3 元组 (pre_sub, sub, fol_sub),如果字符串中不包含 sub 则返回 ('原字符串', '', '')
replace(old, new[,count]) 把字符串中的 old 子字符串替换成 new 子字符串,如果 count 指定,则替换不超过 count 次。
rfind(sub[, start[, end]]) 类似于 find() 方法,不过是从右边开始查找。
rindex(sub[, start[, end]]) 类似于 index() 方法,不过是从右边开始。
rjust(width) 返回一个右对齐的字符串,并使用空格填充至长度为 width 的新字符串。
rpartition(sub) 类似于 partition() 方法,不过是从右边开始查找。
rstrip() 删除字符串末尾的空格。
split(sep=None,maxsplit) 不带参数默认是以空格为分隔符切片字符串,如果 maxsplit 参数有设置,则仅分隔 maxsplit 个子字符串,返回切片后的子字符串拼接的列表。
splitlines(([keepends])) 在输出结果里是否去掉换行符,默认为 False,不包含换行符;如果为 True,则保留换行符。。
startswith(prefix[, start[, end]]) 检查字符串是否以 prefix 开头,是则返回 True,否则返回 False。start 和 end 参数可以指定范围检查,可选。
strip([chars]) 删除字符串前边和后边所有的空格,chars 参数可以定制删除的字符,可选。
swapcase() 翻转字符串中的大小写。
title() 返回标题化(所有的单词都是以大写开始,其余字母均小写)的字符串。
translate(table) 根据 table 的规则(可以由 str.maketrans('a', 'b') 定制)转换字符串中的字符。
upper() 转换字符串中的所有小写字符为大写。
zfill(width) 返回长度为 width 的字符串,原字符串右对齐,前边用 0 填充。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐