python文件操作

例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()分别用来测试指定的路径是否为文件夹。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值