【发布时间】:2021-05-19 13:36:35
【问题描述】:
此程序扫描目录中的文件,并使用 REGEX(模式)提取数据。
我遇到的问题是输出如下:
程序的输出如下:
它打印正确,但 CSV 只需要一个条目,并且没有正确分配给列。 我想知道程序不会这样做
['EE-Data,DEC23,144009,TO,From,0000', 'FF-Data,DEC23,144009,TO,From,0000', 'GG-Data,DEC23,144009,TO,From,0000', 'HH-Data,DEC23,144009,TO,From,0000']
file2.TXT
['AA-Data,DEC23,144009,TO,From,0000', 'BB-DATA,DEC23,144509,TO,From,0000', 'CC-Data,DEC23,144009,TO,From,0000', 'DD-Data,DEC23,144009,TO,From,0000']
file1.TXT
但是在 CSV 中这样做
['AA-Data']['DEC23']['144009']['TO']['From']['0000']['File1.TXT']
['']['']['']['']['']['']['']
['']['']['']['']['']['']['']
['']['']['']['']['']['']['']
ETC
如果我想添加更多模式,它们将进入每一行等。
# use regex on a directory of files and copy into a CSV
import re
import glob
import csv
import os
#Pattern REGEX configuration
patternCPECCC1 = "\/CC(.*?)\/C1"
patternCPET5S6 = "\/T5(.*?)\/S6"
path = "/test/"
#CSV headers
header = ['Column1', 'Column2', 'Column3', 'Column4', 'Column5', 'Column6', 'Column7'] # add more as I expand out the Patterns
# to search DIR defined in path
for files in glob.glob(path +"*.TXT"):
infile = open(files)
fin = infile.read()
pat1 = re.findall(patternCPECCC1, fin)
##### to check what is coming from this for loop #########
filename = os.path.basename(infile.name)
print(pat1)
print(filename)
######################################
with open('R.csv', 'w', newline='') as csvf:
writer = csv.writer(csvf)
writer.writerow(header)
writer.writerow(pat1)
writer.writerow([filename])
任何帮助将不胜感激,我已阅读 CSV 页面并了解其中的一些元素,我需要一些帮助来思考我的方法。谢谢
【问题讨论】:
-
您在循环中分配给
pat1,每次都会覆盖循环上一次迭代的值。如果你想要 allpat1值,你要么需要在同一个循环中写出它们(换句话说,同时打开输入和输出文件),要么累积所有列表(或其他此类容器)中的值,以便您可以将它们全部写入第二个循环中。 -
嗨,杰森,感谢您在这里的输入。当我
print(pat1)时,我会在屏幕上显示值,因此它在两个文件中找到了 4 次模式 - 总共 8 次。我想以上述格式将相同的信息输入 CSV,因此如果有意义,则为 8 行 7 列。我需要将模式搜索的输出放入 CSV 循环中以更新行。