过滤文件内容,然后在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

我在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') 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中嵌入此文件)