练习17 源代码
from sys import argv
from os.path import exists #引入exists函数,如果文件存在,返回True,不存在返回False
script, from_file, to_file = argv
print(f"Copying from {from_file} to {to_file}") #打印复印文件名称,粘贴的文件名称
#we could do these two on one line, how?
in_file = open(from_file) #打开文件
indata = in_file.read() #阅读文件(内容)
print(f"The input file is {len(indata)} bytes long") #len(),得到字符串的长度
print(f"Does the output file exist? {exists(to_file)}") #exist()函数,文件存在返回True,不存在返回False
print("Ready, hit RETURN to continue, CTRL-C to abort.")
input() #input上述字符串内容
out_file = open(to_file, 'w') #只写模式打开文件,若文件存在会被覆盖,不存在会创建
out_file.write(indata) #写入indata变量的内容
print("Alright, all done.")
#关闭,保存文件
out_file.close()
in_file.close()
输出结果
C:\Users\limin>python C:\Users\limin\Desktop\Python3_exercises\ex17.py C:\Users\limin\Desktop\Python3_exercises\test.txt C:\Users\limin\Desktop\Python3_exercises\new_file.txt
Copying from C:\Users\limin\Desktop\Python3_exercises\test.txt to C:\Users\limin\Desktop\Python3_exercises\new_file.txt
The input file is 20 bytes long
Does the output file exist? False
Ready, hit RETURN to continue, CTRL-C to abort.
Alright, all done.
文件内容:This is a test file.
知识点:
- exists()函数:如果文件存在,返回True,不存在返回False
from os.path import exists
2.len()函数,提取计算字符串的长度
3.复制文件内容时,中间放个变量,将内容赋值给变量再写入到新文件即可。
4.终端echo命令——清空文件再写入内容,若无该文件创建新文件
5.终端cat(Linux)和终端type(Windows系统)——打印文件内容。
附加练习
- 简化脚本:
from sys import argv
from os.path import exists
script, from_file, to_file = argv
in_file = open(from_file) #打开文件
indata = in_file.read() #阅读文件(内容)
out_file = open(to_file, 'w') #只写模式打开文件,若文件存在会被覆盖,不存在会创建
out_file.write(indata) #写入indata变量的内容
#关闭,保存文件
out_file.close()
in_file.close()
- 看看你把这个脚本缩到多短,我可以把它变成一行。
可以使用“分号;”写成一行。
3.注意“你会看到”部分,我用了 cat,这是一种把文件打印到屏幕的简单办法,你可以输入 man cat 来看看关于这个命令的作用。
终端 echo 命令可以实现清空再写入内容到文件(如果文件不存在,则创建一个文件), 终端cat 可以实现显示文件内容(Linux/Mac Os系统)==终端type 打印整个文件(Windows系统)
C:\Users\limin>echo "Yes">C:\Users\limin\Desktop\Python3_exercises\test.txt
C:\Users\limin>type C:\Users\limin\Desktop\Python3_exercises\test.txt
"Yes"
4.为什么得在代码里写 out_file.close() ?
因为之前用了open函数,若没关闭,程序没结束之前再打开会出错。
常见问题
- 但我试着把这些代码缩短的时候,我在关闭文件时遇到了错误。 你可能用了 indata = open(from_file).read(),这意味着你不需要在之后再输入 in_file.close() ,因为你已经到了脚本的最后。一旦那一行运行过之后,它就已经被 Python 关掉了。