使用Python解析包含列数据的csv文件

时间:2017-10-25 14:19:32

标签: python csv

我想阅读csv文件的前3列并在存储之前进行一些修改。 csv文件中的数据:

{::[name]str1_str2_str3[0]},1,U0.00 - Sensor1 Not Ready\nTry Again,1,0,12

{::[name]str1_str2_str3[1]},2,U0.00 - Sensor2 Not Ready\nTry Again,1,0,12

从column1,我只想解析[]中的值0或1。 然后是column2中的值 从column3开始,我想解析子字符串“Sensor1 Not Ready”。然后转换为大写并用下划线替换空格(例如 - SENSOR1_NOT_READY)。然后在新列中打印字符串。

解析格式 -

**<value from column 1>.<value from column 2>.<string from column 3>**

我是Python新手编码的新手。有人可以帮我弄这个吗?这样做的最佳和最有效的方法是什么? TIA

到目前为止我尝试了什么 -

import csv
from collections import defaultdict

columns = defaultdict(list)

with open('filename.csv','rb') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        for i in range(len(row)):
            columns[i].append(row[i])
    columns = dict(columns)

对于第3列来说这是一个好方法吗?

x = # Parsed data from Column 3'
a, b = x.split("\n") # 'a' denotes the substring before \n
c, d = a.split("-") # 'd' denotes the substring after '-'
e = d.upper()
new_str = str.replace(" ", "_")
print new_str

1 个答案:

答案 0 :(得分:0)

我的建议是将整行读作字符串,然后使用re模块提取所需的数据,如下所示:

import re

term = '\[(\d)\].*,(\d+),.*-\s([\w\s]+)\\n'

line = '{::[name]str1_str2_str3[0]},1,U0.00 - Sensor1 Not Ready\nTry Again,1,0,12'
capture = list(re.search(term, line).groups())
capture[-1] = '_'.join(capture[-1].split()).upper()
result = ','.join(capture)
#0,1,Sensor1_Not_Ready