Python:读取多个文件并根据其内容将它们移动到目录中

时间:2015-01-15 17:08:25

标签: python

我对python很新,但我想将它用于以下任务:

  1. 读取目录中的所有文件
  2. 在文件的所有行中查找特定字符
  3. 如果此字符仅在文件中出现一次,则将文件复制到特定目录中。
  4. 我尝试了以下代码:

    #! /usr/bin/python
    
    import glob
    import shutil
    
    
    
    path = '/xxxx/Dir/*.txt'   
    files=glob.glob(path)   
    for file in files:     
        f=open(file)  
        f.read()
        total = 0
        for line in f:
            if "*TPR_4*" in line:
                total_line = total + 1
                if total_line == 1:
                    shutil.copy(f, 'xxxx/Test/')
    f.close()
    

    但是,它不起作用。 有什么建议吗?

3 个答案:

答案 0 :(得分:2)

shutil.copy()将文件名作为参数而非打开文件。你应该改变你的电话:

shutil.copy(file, 'xxxx/Test/')

另外:file是一个糟糕的名字选择。它是内置函数的名称。

答案 1 :(得分:1)

逻辑不太正确,你混合totaltotal_lineshutil.copy取名,而不是对象作为参数。请注意,if .. in line不使用通配语法,即搜索TPR_4,请使用'TPR_4',而不使用'*TPR_4*'。请尝试以下方法:

#! /usr/bin/python    
import glob
import shutil

path = '/xxxx/Dir/*.txt'   
files=glob.glob(path)   
for file in files:     
    f=open(file)
    total = 0
    for line in f:
        if "TPR_4" in line:
            total += 1
            if total > 1:
                break  # no need to go through the file any further
    f.close()
    if total == 1:
        shutil.copy(file, 'xxxx/Test/')

答案 2 :(得分:0)

我为你的问题写了一些代码,也许对你有好处。

import os, shutil

dir_path = '/Users/Bob/Projects/Demo'
some_char = 'abc'
dest_dir = "/Users/Bob/tmp"
for root, dirs, files in os.walk(dir_path):
    for _file in files:
        file_path = os.path.join(root, _file)
        copy = False
        with open(file_path, 'r') as f:
            while True:
                line = f.readline()
                if not line:
                    break
                if str(line).find(some_char) > -1:
                    copy = True
                    break
            if copy:
                shutil.copy(file_path, dest_dir)
                print file_path, ' copy...'