08-python的文件操作-读写

01-文件的编码

image-20231031205816240

文件编码

image-20231031210011708

image-20231031210145035

image-20231031210242775

image-20231031210447663

02-文件的读取操作

什么是文件?

image-20231031213200925

image-20231031213342003

image-20231031213359934

image-20231031213431475

mode常用的三种基础访问模式

image-20231031213921352

"""
演示文件的读取
"""
#打开文件
f = open("E:/测试.txt","r",encoding="UTF-8")
print(type(f))

可以先在电脑的某一个盘中创建一个txt文件,可以对其进行打开,读取,其代码是UTF-8,读取其类型是

image-20231031214821184

那么得到的这个文本对象,有哪些可以进行的操作呢?

读操作相关方法

image-20231031214939938

在读取文件内容之前,可以先查看一下记事本的内容如下:

image-20231031215120932

"""
演示文件的读取
"""
#打开文件
f = open("E:/测试.txt","r",encoding="UTF-8")
# print(type(f))
#读取文件-read(),如读取10个字节
print(f"读取10个字节的结果:{f.read(10)}")

image-20231031215407222

print(f"读取全部内容的结果是:{f.read()}")#在不给参数的情况下,读取全部内容

image-20231031215658938

注意:连续两次读取的话,上一次读取的内容,下一次不会再读取。

#读取文件--readLines()
lines=f.readlines()#读取文件的全部行,封装到列表中
print(f"lines对象的类型是:{type(lines)}")
print(f"lines对象的内容是:{lines}")

image-20231031222302161

image-20231031222514387

调用一次读取一行内容。

#打开文件
f = open("E:/测试.txt","r",encoding="UTF-8")
#读取文件--readline()
line1=f.readline()
line2=f.readline()
line3=f.readline()
print(f"第1行数据是:{line1}")
print(f"第2行数据是:{line2}")
print(f"第3行数据是:{line3}")

image-20231031223016404

image-20231031223048118

#打开文件
f = open("E:/测试.txt","r",encoding="UTF-8")
#for循环读取文件行
for line in f:
    print(f"每一行数据:{line}")

image-20231031223352125

文件的关闭

image-20231031223504298

若文件没有关闭,则这个文件会一直占用python程序,所以要关闭这个文件

#文件的关闭
f.close()

image-20231031223937132

通过这种写法,可以自动完成对文件的close操作。

#with open 语法操作文件
with open("E:/测试.txt","r",encoding="UTF-8") as f:
    for line in f:
        print(f"每一行数据:{line}")

image-20231031224404292

并且此时我们对这个文件进行操作时候,可以在E盘内将其删除等一系列操作。

操作汇总

image-20231031224542278

课后练习-单词计数

通过Windows的文本编辑器软件,将如下内容,复制并保存到: word.txt,文件可以存储在任意位置

chengxuyuan itxuexi python

itxuexi python itxuexi

beijing shanghai itxuexi

shenzhen guangzhou itxuexi

wuhan hangzhou itxuexi

zhengzhou bigdata itxuexi

通过文件读取操作,读取此文件,统计itxuexi单词出现的次数

image-20240124132025326

1.read(),count("itxuexi")

2.一行行的读取文件 按照空格切分,统计itxuexi的次数

#打开文件,以读取模式r打开
f=open("D:/word.txt","r",encoding="UTF-8")
#方式1:读取全部内容,通过字符串count方法统计itxuexi单词数量
content=f.read()
count=content.count("itxuexi")
print(f"itxuexi在文件中出现了:{count}次")
#最后关闭文件
f.close()

image-20240124132608136

#打开文件,以读取模式r打开
f=open("D:/word.txt","r",encoding="UTF-8")
#方式2:一行一行的读取内容
for line in f:
    words=line.split(" ")#以空格切分单词,但是可以发现,每一行的末尾会有一个换行符号\n
    print(words)

image-20240124132919125

有反斜杠n的是无法被统计出来的,所以要踢出反斜杠n。可以用line.replace,把反斜杠n去部踢出掉。也可以用line.strip()去除开头和结尾的空格以及换行符。

#打开文件,以读取模式r打开
f=open("D:/word.txt","r",encoding="UTF-8")
#方式2:一行一行的读取内容
for line in f:
    line=line.strip()#去除开头和结尾的空格和换行符
    words=line.split(" ")#以空格切分单词,但是可以发现,每一行的末尾会有一个换行符号\n
    print(words)

image-20240124133139783

很明显换行符都没有了,不在影响结果。可以统计itxuexi的数量了,定义count来统计数量。

#打开文件,以读取模式r打开
f=open("D:/word.txt","r",encoding="UTF-8")
#方式2:一行一行的读取内容
count=0
for line in f:
    line=line.strip()#去除开头和结尾的空格和换行符
    words=line.split(" ")#以空格切分单词,但是可以发现,每一行的末尾会有一个换行符号\n
    for word in words:
        if word=="itxuexi":
            count+=1
print(f"itxuexi出现的次数是:{count}")
#最后关闭文件
f.close()

image-20240124133449686

03_文件的写入-write

image-20231103221523687

如何调用方法把内容写入到文件中?

"""
演示文档的写入
"""
#打开文件,不存在的文件,用w模式进行写文件
import time
​
f = open("E:/test.txt","w",encoding="UTF-8")
#write写入.此时会在e盘中创建这个一个叫test的txt,但是此时txt中还不会有内容,需要flush以后才会写进去
f.write("Hello World!!!")#此时只是将内容写入到了内存中,而不是内盘中
#flush刷新
f.flush()       #将内存中积攒的内容,写入到硬盘的文件中

image-20231103222715413

image-20231103222730050

close功能可以直接内置flush功能,注释掉flush行内容,删除已经生成的文件,执行上面代码,依旧会生成一个test.txt文件

"""
演示文档的写入
"""
#打开文件,不存在的文件,用w模式进行写文件
import time
​
f = open("E:/test.txt","w",encoding="UTF-8")
#write写入.此时会在e盘中创建这个一个叫test的txt,但是此时txt中还不会有内容,需要flush以后才会写进去
f.write("Hello World!!!")#此时只是将内容写入到了内存中,而不是内盘中
#flush刷新
# f.flush()       #将内存中积攒的内容,写入到硬盘的文件中
#close关闭,用close关闭文件
f.close()        #close方法是内置了flush的功能的,也就是上面flush可以不用写

image-20231103223349027

image-20231103223410358

#打开一个已经存在的文件
f= open("E:/test.txt","w",encoding="UTF-8")
#Write写入,flush刷新
f.write("计算机")
#close
f.close()

image-20231103224109807

W模式的两种属性:

1.文件不存在的时候,会将文件创建出来 2.文件存在的时候,再写入新的内容,会将老的内容覆盖替换换位为新的内容

总结:

image-20231103224414159

04-文件的追加操作

image-20231103224543093

"""
演示问价内动追加写入
"""
#以下内容用于创建一个写入计算机内容的txt文件
#打开文件,不存在的文件
f = open("D:/test.txt","a",encoding="UTF-8")
#write写入
f.write("计算机")
#flush刷新
f.flush()
#close关闭
f.close()

image-20231103225648398

image-20231103225711162

#打开一个存在的文件
f = open("E:/test.txt","a",encoding="UTF-8")
#write写入,flush刷新
f.write("k考研别问为什么")
#close关闭
f.close()

image-20231103230218030

很明显,内容已经追加上去了。

若要加入的内容和原来内容不在同一行的话,可以加上\n

#打开一个存在的文件
f = open("E:/test.txt","a",encoding="UTF-8")
#write写入,flush刷新
f.write("\n考研别问为什么")
#close关闭
f.close()

image-20231103230524202

总结

image-20231103230604337

05-文件操作的综合案例

需求:有一份账单文件,记录了消费收入的具体记录,内容如下

name,dato,money,type,somarks
周杰轮,2022-01-01,100000,消费,正式
周杰轮,2022-01-02,300000,收入,正式
周杰轮,2022-01-03,100000,消费,测试
林俊节,2022-01-01,300000,收入,正式
林俊节,2022-01-02,100000,消费,测试
林俊节,2022-01-03,100000,消费,正式
林俊节,2022-01-04,100000,消费,测试
林俊节,2022-01-05,500000,收入,正式
张学油,2022-01-01,100000,消费,正式
张学油,2022-01-02,500000,收入,正式
张学油,2022-01-03,900000,收入,测试
王力鸿,2022-01-01,500000,消费,正式
王力湖,2022-01-02,300000,消费,测试
王力满,2022-01-03,950000,收入,正式
刘德滑,2022-01-01,300000,消费,测试
刘德滑,2022-01-02,100000,消费,正式
刘德滑,2022-01-03,300000,消费,正式

同学们可以将内容复制并保存为 bill.txt文件

image-20231104173155867

"""
演示文件操作综合案例:文件备份
​
"""
#打开文件得到文件对象,准备读取
fr =open("E:/bill.txt","r",encoding="UTF-8")#打开在E盘中已经存在的文件,用r
#打开文件得到文件对象,准备写入
fw =open("E:/bill.txt.bak","w",encoding="UTF-8")#将文件写入到d盘中,用w
#for 循环读取文件
for line in fr:  #循环读取文件里的内容,可以用逗号将内容分隔一下
    #但是注意分隔以后,会有一个换行符,需要处理
    line =line.strip()  #将开头和结尾空格都处理掉,同时也处理掉换行符
    if line.split(",")[4] =="测试" #通过逗号将文件内容分隔,选取列表中第4个元素
        continue        #continue进入下一次循环,这一次后面的内容就不会在执行了
    #判断内容,将满足的内容写出
    fw.write(line)
    #由于前面对内容进行了strip()的操作,所以要手动的写出换行符
    fw.write("\n")
​
#close2个文件对象
fr.close()
fw.close()   #x写出文件调用close()会自动flush()
  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 文本文件的随机读写是指在文件中任意位置读取或写入数据。在Python中,可以使用内置的open()函数打开文件,并使用seek()函数设置读写位置。具体步骤如下: 1. 使用open()函数打开文件,设置文件打开模式为读写模式("r+")或者只写模式("w")。 2. 使用read()函数读取文件中的数据,或者使用write()函数写入数据。 3. 使用seek()函数设置读写位置,可以设置为文件开头(),文件末尾(-1),或者任意位置。 4. 使用tell()函数获取当前读写位置。 5. 使用close()函数关闭文件。 需要注意的是,在进行随机读写操作时,需要确保文件已经存在,并且文件打开模式为读写模式或者只写模式。另外,写入数据时需要注意文件指针的位置,避免覆盖已有数据。 ### 回答2: Python文件之文本文件的随机读写是指在一个文本文件中进行随机访问并读写指定位置和指定长度的数据。在Python中,可以使用seek()方法来进行文件指针的定位,然后使用read()和write()方法来对文件进行读取和写入操作。 当需要随机读取文本文件的某一部分时,可以使用seek()方法将文件指针定位到所需位置,然后使用read()方法来读取指定长度的数据。例如,如果想从文件的第10行读取5个字符,可以使用以下代码: ```python with open('file.txt', 'r') as f: f.seek(9) # 将文件指针定位到第10行 data = f.read(5) # 读取5个字符 print(data) ``` 当需要对文本文件的某一部分进行修改时,可以使用seek()方法将文件指针定位到所需位置,然后使用write()方法来进行修改。例如,如果想将文件的第10行的前5个字符修改为"hello",可以使用以下代码: ```python with open('file.txt', 'r+') as f: f.seek(9) # 将文件指针定位到第10行 f.write('hello') # 修改文件内容 f.seek(0) # 将文件指针定位到开头 print(f.read()) # 输出修改后的文件内容 ``` 需要注意的是,在进行文件读写操作时,需要使用with语句来确保文件在使用完毕后正常关闭,避免内存泄漏的问题。 总之,Python文件之文本文件的随机读写是一项非常有用的技能。它可以让我们对大型文本文件进行灵活的读写操作,可以提高程序的效率和灵活性。需要我们在实践中不断地掌握和运用。 ### 回答3: Python提供了许多方法对文本文件进行随机读写,这些方法可以让我们更加方便地处理大型的文本文件,节省内存并提高程序的效率。 在Python中,我们可以使用open()函数打开一个文本文件,然后使用read()或readlines()方法来读取文件中的数据。其中,read()方法可以读取整个文件的内容,而readlines()方法可以按行读取文件的内容。例如: ``` f = open('text_file.txt', 'r') content = f.read() # 读取整个文件的内容 lines = f.readlines() # 按行读取文件的内容 f.close() ``` 如果我们要对文本文件进行随机读写,可以使用seek()和tell()方法。seek()方法可以将读取位置移动到文件的任意位置,而tell()方法用于返回当前读取位置的字节数。例如: ``` f = open('text_file.txt', 'r+') f.seek(5) # 将读取位置移动到第5个字符 f.write('Hello') # 在原有内容上插入'Hello' f.seek(0) # 将读取位置移动到文件开头 content = f.read() # 读取整个文件的内容 f.close() ``` 此外,我们还可以使用with语句自动关闭文件,以免遗漏close()方法,造成资源浪费。例如: ``` with open('text_file.txt', 'r') as f: content = f.read() # 读取整个文件的内容 ``` 总之,对于文本文件的随机读写Python提供了许多灵活的方法,只需要根据实际需求选择合适的方法即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值