练习一
写一个程序在要保持文件内容的顺序不变的前提下,去除文件中重复的行。
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')