这是代码
from sys import argv
script,from_file, to_file = argv
open(to_file,'w').write(open(from_file).read())
我是python的新手,我是Learning Python the Hard Way,因为一个问题的额外功劳,它说该书的作者能够将代码排成一行,所以我设法得到了它下降到3行,但我被卡住了。
关心帮助?
哦,代码将一个文件的内容复制到另一个文件,或者它的意思是。这是我的目标。
答案 0 :(得分:9)
可以将其作为一个表达式执行,即不需要分号:
__import__('shutil').copy(__import__('sys').argv[1], __import__('sys').argv[2])
或
open(__import__('sys').argv[2], "w").write(open(__import__('sys').argv[1]).read())
当然,没有一个心智正常的人会更喜欢你的示例代码。我要做的唯一改变是没有理由将文件名分配给临时变量:
from sys import argv
open(argv[1],'w').write(open(argv[2]).read())
更多Pythonic的写作方式是:
import sys
with open(sys.argv[1]) as src, open(sys.argv[2]) as dest:
for line in src:
dest.write(line)
然后你可以开始使用argparse
来使命令行读取更加健壮......
答案 1 :(得分:6)
您可以使用分号将import语句保留在同一行。并直接引用argv中的项而不是使用变量。
from sys import argv; open(argv[2],'w').write(open(argv[1]).read())
答案 2 :(得分:3)
您需要了解的两件事情:
1)您可以在同一行包含多个python语句,方法是用分号
分隔2)您无需将命令行参数移动到单独的变量中即可使用它们。
答案 3 :(得分:1)
要避免@katrielalex的多个__import__
,您可以这样做:
(lambda a:open(a[2],"w").write(open(a[1]).read()))(__import__('sys').argv)
它更短,但它很难看。
答案 4 :(得分:0)
您可以删除第二行并直接在第三行引用argv
。要合并剩余的行,可以使用分号。这有点作弊,但我没有看到任何更好的解决方案,因为你必须导入sys。
from sys import argv; open(argv[2],'w').write(open(argv[1]).read())
答案 5 :(得分:0)
我也在学习这个。
from_file, to_file = raw_input("copy from: "), raw_input("copy to: ")
open(to_file, 'w').write(open(from_file).read())
答案 6 :(得分:-2)
import sys
open(sys.argv[3], 'w').write(open(sys.argv[2]).read())
可能是你能做的最好的事情。