我的代码在目录中搜索*.lis
个文件并搜索aborted
- *.lis
个文件。
这是我的代码:
def aborted_files(file):
in_file = open(file,'r')
for lines in in_file.readlines():
if re.search("aborted", lines):
print in_file
in_file.close()
for file in os.listdir("./"):
if file.endswith(".lis"):
aborted_files(file)
我在2个文件lisfile1.lis
和lisfile2.lis
中对其进行测试。
在lisfile1.lis
我有aborted
,我的代码的结果是:
<open file 'lisfile1.lis', mode 'r' at 0x2b0edd174660>
<open file 'lisfile1.lis', mode 'r' at 0x2b0edd174660>
您能否帮助我仅获得aborted
- *.lis
个文件名
我的代码中有什么不对?
答案 0 :(得分:1)
如果您要打印文件名,可以打印出file.name
变量。
然后,您在这里不需要re.search()
功能,只需使用in
。
使用return
返回文件名将比使用print
更好。
但是,如果您在此处使用打印,则会打印文件名n
次(n
是该文件中的aborted
个数。)
.readlines()
这里也没用。
使用with
自动关闭文件会更简单,更安全。
def aborted_files(file):
with open(file, 'r') as in_file:
for lines in in_file:
if "aborted" in lines:
return in_file.name
for file in os.listdir("./"):
if file.endswith(".lis"):
print aborted_files(file)
答案 1 :(得分:1)
这里有两件事。
(1)您为每场比赛打印文件。我猜测>= 1
是否有'aborted'
次出现,您可能只想打印一次文件名。
(2)您打印出实际的文件对象,而不是文件名。您还可以使用with open(...)
来处理为您关闭文件。
def aborted_files(file):
with open(file, 'r') as in_file:
for lines in in_file.readlines():
if re.search("aborted", lines):
print in_file.name
return