我想阅读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
答案 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