2015-01-15 58 views
0

我很新的蟒蛇,但我想用它來執行以下任務:的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() 

但是,它不工作。 有什麼建議嗎?

+0

它是否複製,如果你讓它總是通過測試? – 2015-01-15 17:12:59

+0

謝謝,答案是否定的。 – efrem 2015-01-15 17:13:35

回答

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/') 
+0

謝謝,但它不工作。 – efrem 2015-01-15 17:28:30

+0

什麼具體不工作?我在一組測試文件上試了一下,它做了我理解它應該做的事情。 – 2015-01-15 17:29:11

+0

我有一個文件只包含TPR_4字符串的一行。在文件夾Dir中有更多的.txt文件。我運行它,Test文件夾是空的,上面提到的文件應該在那裏。 – efrem 2015-01-15 17:30:35

2

shutil.copy()將文件名作爲參數未打開的文件。您應該更改您的來電:

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

另外:file是一個可憐的名字的選擇。這是一個內置函數的名字。

+0

謝謝,但仍然無法正常工作。 – efrem 2015-01-15 17:19:02

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...' 
相關問題