require 'uri'
%w[
http://www.speedtest.net/
http://webcache.googleusercontent.com/search%3Fhl%3Den%26biw%26bih%26q%3Dcache:M47_v0xF3m8J
].reject{ |url| URI.parse(url).host[/googleusercontent\.com$/] }
# => ["http://www.speedtest.net/"]
您好,我想做的是将用户指定的任意数量的文件连接在一起。将要求用户指定nFiles var中的文件数。
此代码的限制是,如果用户指定他们想要连接四个文件,则他们无法这样做。
如何基于nFiles中的用户输出专门动态实现from CaseManager import d2
import shutil
d11 = d2 + '/ReconstructedObjects/'
if not os.path.isdir(d2):
try:
os.mkdir(d2)
except OSError as esc:
if exc.errno != errno.EEXIST:
raise
nFiles = ('How many objects would you like to concatenate?')
catFile1 = raw_input('Specify the first Object ID')
catFile2 = raw_input('Specify the second Object ID')
catFile3 = raw_input('Specify the third Object ID')
d11 = open(CatFile, 'wb')
shutil.copyfileobj(open(catFile1, 'rb'), d11)
shutil.copyfileobj(open(catFile2, 'rb'), d11)
shutil.copyfileobj(open(catFile3, 'rb'), d11)
d11.close()
?
答案 0 :(得分:0)
使用循环和列表。将代码转换为使用任意数量文件的最简单方法是首先循环nFiles
次,每次都要求另一个文件名并将其放入列表中。然后循环遍历文件名列表,对每个文件名进行复制操作。
但是,您还可以进一步压缩事物并在被告知文件名后立即执行连接步骤,而无需将其保留在列表中:
n_files = int(raw_input('How many objects would you like to concatenate?')
with open(d11, 'wb') as destination_file:
for i in range(n_files):
fn = raw_input('Specify the ID of Object #{}'.format(i+1))
with open(fn, 'rb') as cat_file:
shutil.copyfileobj(cat_file, destination_file)
我已经改变了一些变量名,以遵循常见的Python样式(对于大多数变量,lowercase_with_underscores
)。如果您愿意,您当然可以使用自己的风格(只是保持一致!)。我还使用with
语句来自动为我们关闭文件,这比依赖它们在没有更多引用的时候关闭更好。