Python 如何搜索文件、计算点击数并将数字写入.csv中的B列?
这是我的剧本。它当前查找路径中包含*cycle*.log的所有文件,然后查找这些文件中包含“timeout of”的所有行,并将它们传递到outfilecamera以及找到它的文件的名称中Python 如何搜索文件、计算点击数并将数字写入.csv中的B列?,python,search,csv,count,Python,Search,Csv,Count,这是我的剧本。它当前查找路径中包含*cycle*.log的所有文件,然后查找这些文件中包含“timeout of”的所有行,并将它们传递到outfilecamera以及找到它的文件的名称中 i = 0 ii = "\n" for i in range(0,listlength): path = pathlist[i].strip() outfilecamera = join((path), 'cameratimeouts.txt') os.chdir(path)
i = 0
ii = "\n"
for i in range(0,listlength):
path = pathlist[i].strip()
outfilecamera = join((path), 'cameratimeouts.txt')
os.chdir(path)
for path in glob.glob("*cycle*.log"):
with open(path) as f_in, open(outfilecamera, 'a') as f_out:
f_out.writelines(path)
f_out.writelines(ii)
f_out.writelines(line for line in f_in if "timeout of" in line)
我还想做的是计算在文件中找到命中的次数,并将该数字粘贴到csv文件的B列中。即,每行将是每个文件中的点击数。A列理想情况下等于i
我已经搜索了很多年,但找不到计数函数
我感谢我们的帮助 这是您需要的
import csv
import glob
searched = 'timeout of'
with open('output.csv', 'wb') as csvfile:
cwriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
cwriter.writerow(['File', 'Number'])
for path in glob.glob("*cycle*.log"):
with open(path) as f_in:
n = 0
for line in f_in.readlines():
if searched in line:
n += 1
cwriter.writerow([path, n])
格雷普呢?这项任务将非常简单
grep -c 'timeout of' *cycle*.log
对于类似csv的输出,您需要将冒号替换为逗号:
grep -c 'timeout of' *cycle*.log | sed 's/:/,/'
并将结果放入cameratimeouts.txt文件:
grep -c 'timeout of' *cycle*.log | sed 's/:/,/' >cameratimeouts.txt
如果您坚持使用python,我的解决方案是:
for i in range(0,listlength):
path = pathlist[i].strip()
outfilecamera = join((path), 'cameratimeouts.txt')
os.chdir(path)
for path in glob.glob("*cycle*.log"):
with open(path) as f_in, open(outfilecamera, 'a') as f_out:
f_out.write('%s,%d\n' % (path, sum(l.count('timeout of') for l in f_in)))
在此处隐藏其找到的次数:
f_out.writelines(line for line in f_in if "timeout of" in line)
因此,您所要做的就是首先消耗生成器,比如说进入一个列表:
matched_lines = list(line for line in f_in if "timeout of" in line)
f_out.writelines(matched_lines)
接下来,只需收集每个文件的匹配数。在循环顶部创建空白列表,然后在循环内部添加文件名和计数:
file_counts = []
# .. your loop starts
matched_lines = list(line for line in f_in if "timeout of" in line)
f_out.writelines(matched_lines)
file_counts.append((os.path.basename(path),len(matched_lines)))
处理完文件后:
with open('results.csv','w') as f:
writer = csv.writer(f, delimiter=",")
writer.writerow(['File Name','Count'])
writer.writerows(file_counts)