例5-1:合并两个txt文件内容,两文件多行内容交替写入结果文件,若一个文件内容较少,则把另一个文件的剩余内容写入文件尾部。
def mergeTxt(txtFiles):
with open('result.txt', 'w') as fp:
with open(txtFiles[0]) as fp1, open(txtFiles[1]) as fp2:
while True:
#交替读取文件1和文件2中的行,写入结果文件
line1 = fp1.readline()
if line1:
fp.write(line1)
else:
#如果文件1结束,结束循环
flag = False
break
line2 = fp2.readline()
if line2:
fp.write(line2)
else:
flag = True
break
#获取还未结束的文件对象
fp3 = fp1 if flag else fp2
#把剩余内容写入结果内容
for line in fp3:
fp.write(line)
txtFiles = ['1.txt', '2.txt']
mergeTxt(txtFiles)
例5-2:把包含若干房屋信息列表写入JSON文件,然后读取并输出这些信息
dumps()函数用来把对象序列化为字符串,loads()函数把JSON格式化字符串还原为python对象,dump()函数把数据序列化直接写入文件,load()函数读取JSON格式文件直接还原为python对象。
import json
info = [
{'小区名称': '小区A', '均价':8000, '月交易量': 20},
{'小区名称': '小区B', '均价':8500, '月交易量': 35},
{'小区名称': '小区C', '均价':7000, '月交易量': 50},
{'小区名称': '小区D', '均价':10000, '月交易量': 18}]
#输出:info
#[{'小区名称': '小区A', '均价': 8000, '月交易量': 20}, {'小区名称': '小区B', '均价': 8500, '月交易量': 35}, {'小区名称': '小区C', '均价': 7000, '月交易量': 50}, {'小区名称': '小区D', '均价': 10000, '月交易量': 18}]
with open('房屋信息.json', 'w') as fp:
json.dump(info, fp, indent=4,separators=[',', ':'])
with open('房屋信息.json') as fp:
info = json.load(fp)
for inf in info:
print(inf)
输出:
{'小区名称': '小区A', '均价': 8000, '月交易量': 20}
{'小区名称': '小区B', '均价': 8500, '月交易量': 35}
{'小区名称': '小区C', '均价': 7000, '月交易量': 50}
{'小区名称': '小区D', '均价': 10000, '月交易量': 18}
例5-3 模拟生成某饭店自2020年1月1日开始,连续100天试营业期间的营业额数据,写入csv文件。文件中共两列,第一列为日期,第二列为营业额,文件第一行为表头或字段名称。若该饭店第一天营业额基数为500,每天增加5元,此外每天随机增加5到50元不等。
from csv import reader, writer
from random import randrange
from datetime import date, timedelta
fn = 'data.csv'
with open(fn, 'w') as fp:
#创建csv文件对象
wr= writer(fp)
#写入表头
wr.writerow(['日期', '营业额'])
#第一天的日期,2020年1月1日
startDate = date(2020, 1, 1)
#生成100个模拟数据
for i in range(100):
#生成一个模拟数据,写入csv文件
amount = 500 + i * 5 + randrange(5, 50)
wr.writerow([str(startDate), amount])
#下一天
startDate = startDate + timedelta(days=1)
#读取并显示上面代码生成的csv文件内容
with open(fn, 'r') as fp:
for line in reader(fp):
if line:
print(*line)
例5-4 编写程序,检查并输出当前文件夹及其子文件夹中包含指定字符串的docx,xlsx和pptx文档的名称。其中,sys.argv接收命令行参数,os.listdir()列出指定文件夹中所有文件和文件夹的名称,os.path.join()把多个路径连接成一个更长的路径并自动插入争取的路径分隔符,os.path.isfile()和os.path.isdir()分别用来测试指定的路径是否为文件夹。