过滤文件内容,然后在python中读取为csv
我在bash脚本中使用grep,然后在pandas中读取为csv 因为我的日志文件如下 垃圾 propercsv 垃圾 propercsv 我greppropercsv,生成一个csv文件,然后使用下面的代码加载它。我只想将其嵌入python中。 这是从作为参数给定的日志文件中筛选出csv过滤文件内容,然后在python中读取为csv,python,bash,pandas,csv,Python,Bash,Pandas,Csv,我在bash脚本中使用grep,然后在pandas中读取为csv 因为我的日志文件如下 垃圾 propercsv 垃圾 propercsv 我greppropercsv,生成一个csv文件,然后使用下面的代码加载它。我只想将其嵌入python中。 这是从作为参数给定的日志文件中筛选出csv #!/usr/bin/python import csv import sys with open(sys.argv[1], 'rb') as f_input, open(sys.argv[2], 'wb
#!/usr/bin/python
import csv
import sys
with open(sys.argv[1], 'rb') as f_input, open(sys.argv[2], 'wb') as f_output:
csv_output = csv.writer(f_output)
csv_output.writerow(cols)
for row in csv.reader(f_input, delimiter='|'):
# Remove any entries that do not have a colon
row = [c for c in row if c.find(':') != -1]
# Convert remaining columns into a dictionary
entries = {c.split(':')[0].strip() : c.split(':')[1].strip() for c in row}
csv_output.writerow([entries.get(c, "") for c in cols])
您可以简单地过滤日志文件中的行,这些行会产生适当数量的csv列(例如>=3),如下所示:
import pandas as pd
from itertools import ifilter
import csv
data = []
cols = ['Name', 'Place', 'Time']
with open('logfile.txt', 'rb') as f_input:
for row in ifilter(lambda x: len(x) >= 3, csv.reader(f_input, delimiter='|')):
row = [c for c in row if c.find(':') != -1]
entries = {c.split(':')[0].strip() : c.split(':')[1].strip() for c in row}
data.append(entries.get(c, "") for c in cols)
print pd.DataFrame(data, columns=cols)
为您提供以下输出:
命名地点时间
0 abc Xyz 123
1 abc Xyz 123
2 abc Xyz 123
3 abc Xyz 123
你能在问题中添加一些CSV示例行吗?垃圾\n |名称:abc |地点:Xyz |时间:123\n gabage所以我`grep Name:`在bash脚本中创建一个文件.CSV(我只想在python中嵌入此文件)