Python学习:文件存储-文件

一、打开文件

在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')
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值