python3文件处理练习题

练习一

写一个程序在要保持文件内容的顺序不变的前提下,去除文件中重复的行。

import os

with open('db.txt', 'r', encoding='utf-8') as read_f, \
        open('db.txt.swap', 'w', encoding='utf-8') as write_f:
    s = set()
    for line in read_f:
        if line not in s:
            s.add(line)
            write_f.write(line)
os.remove('db.txt')
os.rename('db.txt.swap', 'db.txt')

 

练习二

 

写一个在终端执行拷贝文件的命令,文件不仅限于文本文件,要求是:在终端环境下输入命令:

python(或者python3) Python文件路径 源文件路径 目标文件路径

 

比如:

python /Users/albert/Desktop/02/02.py /Users/albert/Desktop/02/a.jpg  /Users/albert/Desktop/b.jpg

import sys

list1 = sys.argv  # 把命令行中解释器后空格分割的所有参数都存成列表
# print(list1)

src_file_path = list1[1]
dst_file_path = list1[2]
# print(src_file_path)
# print(dst_file_path)

with open(r'%s' % src_file_path, mode='rb') as src_f, \
        open(r'%s' % dst_file_path, mode='wb') as dst_f:
    for line in src_f:
        dst_f.write(line)

 

练习三

 

写一个修改文件的程序,要求是原来的内容不能被覆盖,修改之后字符之间的空格不能变化(4个空格)

源文件内容如下:

 

马一特    18    male

刘德华    50    male

林志玲    20    female

 

修改后的文件:

 

马一特[Albert]    18    male

刘德华    50    male

林志玲    20    female

# 修改文件方式一:
# 1、先把文件内容全部读入内存
# 2、然后在内存中完成修改
# 3、再把修改后的结果覆盖写入原文件
# 缺点:会在文件内容过大的情况下,占用过多的内存


with open('user.txt', mode='r', encoding='utf-8') as f:
    data = f.read()
    data = data.replace('马一特', '马一特[Albert]')

with open('user.txt', mode='w', encoding='utf-8') as f:
    f.write(data)

# 修改文件方式二:
# 以读的方式打开原文件,以写的方式打开一个新文件,一行一行的读入文件内容
import os

with open('user.txt', mode='rt', encoding='utf-8') as read_f, \
        open('user.txt.swap', mode='wt', encoding='utf-8') as write_f:
    for line in read_f:
        if '马一特' in line:
            line = line.replace('马一特', '马一特[Albert]')

        write_f.write(line)

os.remove('user.txt')
os.rename('user.txt.swap', 'user.txt')

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值