Python新手在这里。刚开始学习。我正在关注“如何以艰难的方式学习Python”,其中一个练习就是尽可能地缩短脚本。我遇到了一种障碍,我很欣赏任何见解。代码只需一个文件并将其复制到另一个文件中。这就是代码最初的样子。
from sys import argv
from os.path import exists
script, from_file, to_file = argv
print "Copying from %s to %s" % (from_file, to_file)
in_file = open(from_file)
indata = in_file.read()
print "The input file is %d bytes long" % len(indata)
print "Does the output file exist? %r" % exists(to_file)
print "Ready, hit RETURN to continue, CTRL-C to abort."
raw_input()
out_file = open(to_file, 'w')
out_file.write(indata)
print "Alright, all done."
out_file.close()
in_file.close()
现在代码如下:
from sys import argv; script, from_file, to_file = argv;
in_data = open(from_file).read()
out_file = open(to_file, 'w').write(in_data)
使用分号作为将两条线保持为一条线的方法是否是作弊?我摆脱了一些功能,因为我觉得他们对于这个特殊的练习毫无意义。作者说他能够将脚本缩减到一行,我将不胜感激任何有关如何执行此操作的建议。脚本以这种方式工作,我尝试用分号将它们全部装到一行或两行但是我想知道是否有更好的解决方案。非常感谢。
答案 0 :(得分:2)
您可以使用shutil.copyfile
或shutil.copyfileobj
。
http://docs.python.org/2/library/shutil.html
顺便说一句:
缩短代码的目的通常是为了更容易理解。虽然使用分号在一行中合并多个语句并不算作弊,但它会降低您的代码的可读性。
答案 1 :(得分:2)
嗯,我想是单行,
open('outfile','w').write(open('infile').read())
这让我很难写这样的代码。实际上,不要使用open
文件句柄,使用open
作为上下文管理器:
with open('infile') as r, open('outfile','w') as w:
#do things to r and w here
它既紧凑又编码良好。
重新:分号。美丽胜过丑陋。不惜一切代价避免使用它们,除非你为某些code golf做出贡献。答案 2 :(得分:0)
from sys import argv;
script, from_file, to_file = argv;
open(to_file, 'w').write(open(from_file).read())
我也是作为代码初学者学习本书的。