在python中,我怎么能将这三行代码变成一行代码?

时间:2010-11-22 14:24:47

标签: python copy

这是代码

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行,但我被卡住了。

关心帮助?

哦,代码将一个文件的内容复制到另一个文件,或者它的意思是。这是我的目标。

7 个答案:

答案 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())

可能是你能做的最好的事情。