参考视频
文件的操作
# 编码UTF-8
# 文件:文本、视频、音频、图像、可执行文件等类别
"""
演示对文件的读取
"""
import time
# 打开文件,f是文件对象名称,!!!文件夹与文件之间用“/”分开
f = open('D:/Pycharm-beginner/test.txt', 'r', encoding='UTF-8') # 路径、模式,前两个是位置参数,后面是关键字参数
print(type(f))
"""
<class '_io.TextIOWrapper'>
"""
# with open 语法操作文件,通过在with open的语句块中对文件进行操作
# 可以在操作完成后自动关闭close文件,避免遗忘掉close方法
with open('D:/Pycharm-beginner/test.txt', 'r', encoding='UTF-8') as f:
for line in f:
print(f'每一行的数据是:{line}')
time.sleep(50000) # 可以删除文件,操作完for循环后自动进行close操作
"""
每一行的数据是:黑马程序员是传智教育旗下高端IT教育品牌
每一行的数据是:成立至今以高品质数学质量直得好口碑
每一行的数据是:为企业输送了大批忧质IT人才
每一行的数据是:败力于培养高级软件工程师
每一行的数据是:现已开设10余个精品热门学科
每一行的数据是:20所直营分校遍布全国
每一行的数据是:学Python来黑马,月薪过万。
"""
文件的读取案例
# 通过Windows的文本编辑器软件,将如下内容,复制并保存到:
# word.txt,文件可以存储在任意位置
# itheima itcast python
# itheima python itcast
# beijing shanghai itheima
# shenzhen guangzhou itheima
# wuhan hangzhou itheima
# zhengzhou bigdata itheima
# 通过文件读取操作,读取此文件,统计itheima单词出现的次数
# 打开文件,以读取模式打开
f = open('D:/Pycharm-beginner/word.txt', 'r', encoding='UTF-8')
# 方式一:读取全部内容,通过字符串count方法统计itheima单词数量
content = f.read()
count = content.count('itheima')
print(f'itheima在文件中出现了:{count}次')
# 方式二:读取文件,一行一行读取
for line in f:
words = line.split(' ') # 有换行符‘\n'
print(words)
"""
['itheima', 'itcast', 'python\n']
['itheima', 'python', 'itcast\n']
['beijing', 'shanghai', 'itheima\n']
['shenzhen', 'guangzhou', 'itheima\n']
['wuhan', 'hangzhou', 'itheima\n']
['zhengzhou', 'bigdata', 'itheima']
"""
count = 0 # 使用count变量来累计itheima出现的次数
for line in f:
line = line.strip() # 去除开头和结尾的空格以及换行符
words = line.split(' ')
for word in words:
if word == 'itheima':
count += 1
print(words)
print(f'itheima出现的次数是:{count}')
"""
['itheima', 'itcast', 'python']
['itheima', 'python', 'itcast']
['beijing', 'shanghai', 'itheima']
['shenzhen', 'guangzhou', 'itheima']
['wuhan', 'hangzhou', 'itheima']
['zhengzhou', 'bigdata', 'itheima']
itheima出现的次数是:6
"""
# 关闭文件
f.close()
文件的写入操作
"""
演示文件的写入
"""
# 打开文件,不存在的文件,r,w,a
# import time == time.sleep(600000)
f = open('D:/Pycharm-beginner/test2.txt', 'w', encoding='UTF-8')
# write写入
f.write('hello world!!!') # 已经创建空文件,内容写入到内存中(等待一次性调用)
# flush刷新,有close后,取消f.flush()代码仍可建立文件
f.flush() # 将内存中积攒的内容,写入到硬盘的文件中
# time.sleep(600000)
# close关闭
f.close() # close方法,内置了flush的功能的
# 打开一个存在的文件
f = open('D:/Pycharm-beginner/test2.txt', 'w', encoding='UTF-8')
# write写入,flush刷新
f.write('黑马程序员')
# close关闭
f.close()
"""
已经存在的文件会全部清空,写入新的东西。
"""
文件的追加写入操作
# a模式,文件不存在会创建文件
# a模式,文件存在会在最后,追加写入文件
# 打开文件,不存在的文件
f = open('D:/Pycharm-beginner/test3.txt', 'a', encoding='UTF-8')
# write写入
f.write('黑马程序员')
# flush刷新
f.flush()
# close关闭
f.close()
"""
创建了一个写着黑马程序员的文件
"""
f = open('D:/Pycharm-beginner/test3.txt', 'a', encoding='UTF-8')
# write写入
f.write('学Python最佳选择\n月薪过万')
# flush刷新
f.flush()
# close关闭
f.close()
"""
创建了一个写着'
黑马程序员学Python最佳选择
月薪过万
'的文件
"""
文件操作的综合案例
# 需求:有一份账单文件,记录了消费收入的具体记录,内容如下:
# name,date,money,type,remarks
#
# 周杰轮,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文件
# 我们现在要做的就是:
# 读取文件
# 将文件写出到bill.txt.bak文件作为备份
# 同时,将文件内标记为测试的数据行丢弃
#
# 实现思路:
# open和r模式打开一个文件对象,并读取文件
# open和w模式打开另一个文件对象,用于文件写出
# for循环内容,判断是否是测试不是测试就write写出,是测试就continue跳过
# 将2个文件对象均close()
# 打开文件得到文件对象,以读取模式打开
fr = open('D:/Pycharm-beginner/bill.txt', 'r', encoding='UTF-8')
# 打开文件得到文件对象,准备写入
fw = open('D:/Pycharm-beginner/bill_bak.txt', 'w', encoding='UTF-8')
# for循环读取文件
for line in fr:
line = line.strip() # 有换行符‘\n'
if line.split(',')[4] == '测试':
continue # continue进入下一次循环,这一次后面的内容跳过
# 将内容写出
fw.write(line)
# 由于前面对内容进行了strip()操作,所以要手动的写出换行符
fw.write('\n')
# close2个文件对象
fr.close()
fw.close() # 写出文件调用close()会自动flush()
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 3415226167@qq.com