Python课程设计 第 9 / 52 篇

文件处理-参考答案

练习一

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

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')