迭代文件列表并使用python复制它们

时间:2013-07-23 14:39:17

标签: python loops copy

我想创建一个函数,它会遍历列表到我放入的文件名,然后当条件满足时,我希望它将每个后续文件复制到名为'INPUT'的文件。

这是我到目前为止所做的:

file_list = [file1, file2, file3]
def queue():
    if condition1_met:
        for item in file_list:
            os.system('cp item INPUT')
        else:
            return queue()

但是我只是不知道迭代然后复制文件的最佳方法是什么,因为os.system位不会识别'item'。

2 个答案:

答案 0 :(得分:1)

你必须替换:

os.system('cp item INPUT')

由:

os.system('cp %s INPUT' % item)

因此,项迭代器的值在字符串中被替换并作为OS调用执行。

根据评论编辑:

最好是使用shutil:

shutil.copyfile(item, 'INPUT')

这样就不需要替代。

答案 1 :(得分:0)

此代码会将每个文件复制到INPUT,每次都覆盖INPUT:

import shutil

file_list = [file1, file2, file3]
def queue():
  if condition1_met:
    for item in file_list:
      shutil.copyfile(item, "INPUT")
    else:
      return queue()

如果你想将文件的内容附加到INPUT,那么这应该可以完成这项工作:

python 2.6版

import contextlib

file_list = [file1, file2, file3]
def queue():
  if condition1_met:
    for item in file_list:
      with contextlib.nested(open(item,"r"), open("INPUT","a+")) as (src,dst):
        dst.writelines(src.readlines())
    else:
      return queue()

python 2.7版本

file_list = [file1, file2, file3]
def queue():
  if condition1_met:
    for item in file_list:
      with open(item,"r"), open("INPUT","a+") as src,dst:
        dst.writelines(src.readlines())
    else:
      return queue()