Python:读取多个文件并根据其内容将其移动到一个目录中
我对python非常陌生,但我想将其用于以下任务:Python:读取多个文件并根据其内容将其移动到一个目录中,python,Python,我对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()
#! /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()
然而,它不起作用。
有什么建议吗 shutil.copy()
将文件名作为参数,而不是打开文件。您应该更改通话:
shutil.copy(file, 'xxxx/Test/')
另外:文件
是一个糟糕的名称选择。它是一个内置函数名。shutil.copy()
将文件名作为参数,而不是打开的文件。您应该更改通话:
shutil.copy(file, 'xxxx/Test/')
另外:文件
是一个糟糕的名称选择。它是一个内置函数名。shutil.copy()
将文件名作为参数,而不是打开的文件。您应该更改通话:
shutil.copy(file, 'xxxx/Test/')
另外:文件
是一个糟糕的名称选择。它是一个内置函数名。shutil.copy()
将文件名作为参数,而不是打开的文件。您应该更改通话:
shutil.copy(file, 'xxxx/Test/')
另外:
文件
是一个糟糕的名称选择。这是一个内置函数的名称。逻辑不太正确,而且您混淆了total
和total\u line
和shutil。copy
以名称而不是对象作为参数。请注意,if。。第
行中不使用globbing语法,即要搜索TPR\u 4
,请使用“TPR\u 4”
,而不是“*TPR\u 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/')
逻辑不太正确,而且您混淆了
total
和total\u line
和shutil。copy
以名称而不是对象作为参数。请注意,if。。第
行中不使用globbing语法,即要搜索TPR\u 4
,请使用“TPR\u 4”
,而不是“*TPR\u 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/')
逻辑不太正确,而且您混淆了
total
和total\u line
和shutil。copy
以名称而不是对象作为参数。请注意,if。。第
行中不使用globbing语法,即要搜索TPR\u 4
,请使用“TPR\u 4”
,而不是“*TPR\u 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/')
逻辑不太正确,而且您混淆了
total
和total\u line
和shutil。copy
以名称而不是对象作为参数。请注意,if。。第
行中不使用globbing语法,即要搜索TPR\u 4
,请使用“TPR\u 4”
,而不是“*TPR\u 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/')
我为你的问题写了一些代码,也许对你有好处
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...'
我为你的问题写了一些代码,也许对你有好处
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...'
我为你的问题写了一些代码,也许对你有好处
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...'
我为你的问题写了一些代码,也许对你有好处
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...'
如果你让它总是通过考试,它会复制吗?谢谢,答案是否。如果你让它总是通过考试,它会复制吗?谢谢,答案是否。如果你让它总是通过考试,它会复制吗?谢谢,答案是否。如果你让它总是通过考试,它会复制吗?我在一个文件测试集上尝试了它,它完成了我理解它应该做的事情。在文件夹Dir中有更多的.txt文件。我运行它,测试文件夹是空的,上面提到的文件应该在那里。啊,所以你不是在寻找字符串
“*TPR\u 4*”
,而是在寻找“TPR\u 4”
?在这种情况下,不需要在那里有星号,它不是一个球形模式。哦,我明白了,您还想排除包含多行字符串的文件。如果你最多有一行这样的代码,代码可能会更简单。不,你是对的,我想排除那些有不止一次模式的文件。明白了,它似乎可以工作!非常感谢,马上接受并竖起大拇指!什么东西不起作用?我在一个文件测试集上尝试了它,它完成了我理解它应该做的事情。在文件夹Dir中有更多的.txt文件。我运行它,测试文件夹是空的,上面提到的文件应该在那里。啊,所以你不是在寻找字符串“*TPR\u 4*”
,而是在寻找“TPR\u 4”
?在这种情况下,不需要在那里有星号,它不是一个球形模式。哦,我明白了,您还想排除包含多行字符串的文件。如果你最多有一行这样的代码,代码可能会更简单。不,你是对的,我想排除那些有不止一次模式的文件。明白了,它似乎可以工作!非常感谢,马上接受并竖起大拇指!什么东西不起作用?我在一个文件测试集上尝试了它,它完成了我理解它应该做的事情。在文件夹Dir中有更多的.txt文件。我运行它,测试文件夹是空的,上面提到的文件应该在那里。啊,所以你不是在寻找字符串“*TPR\u 4*”
,而是在寻找“TPR\u 4”
?在这种情况下,不需要在那里有星号,它不是一个球形模式。哦,我明白了,您还想排除包含多行字符串的文件。如果你最多有一行这样的代码,代码可能会更简单。不,你是对的,我想排除那些有不止一次模式的文件。明白了,它似乎可以工作!非常感谢,马上接受并竖起大拇指!什么东西不起作用?我在一个文件测试集上尝试了它,它完成了我理解它应该做的事情。文件夹Dir中有more.t