我对python很新,但我想将它用于以下任务:
我尝试了以下代码:
#! /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 :(得分:2)
shutil.copy()
将文件名作为参数而非打开文件。你应该改变你的电话:
shutil.copy(file, 'xxxx/Test/')
另外:file
是一个糟糕的名字选择。它是内置函数的名称。
答案 1 :(得分:1)
逻辑不太正确,你混合total
和total_line
和shutil.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...'