【问题标题】:Parsing a csv file with column data in Python在 Python 中解析带有列数据的 csv 文件
【发布时间】:2017-10-25 14:19:32
【问题描述】:

我想读取 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

【问题讨论】:

  • 你试过什么?你看过 csv 模块的 python 文档吗?
  • 是的,我确实经历过。我唯一能理解的是如何读取 csv 文件。
  • 如果您可以向我们展示您尝试过的代码,我们可以帮助您。如果您不显示任何代码,您可能不会获得太多帮助。
  • @TomDalton 我在我的原始帖子中添加了一个代码 sn-p。
  • 好的,所以我可以看到你有 columns 作为默认字典,键是 CSV 行号。每个值都是一个列表,表示该 CSV 行中的单元格。但是,您说您的问题在于从列中解析数据?你有什么尝试?可能值得提出一个新问题,并忽略有关 CSV 的信息(因为这似乎不是问题),而是专注于“我如何从 Y 中解析 X?”,以及一个小的 sn- p 你为此做了什么。

标签: python csv


【解决方案1】:

我的建议是将整行作为字符串读取,然后使用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

【讨论】:

  • @SergeBallesta 为什么我需要这样做?
  • 如果line.startswith('{'): ...可以跳过复杂的逻辑。
  • 如果\n 在行字符串内,则不需要。
猜你喜欢
  • 2020-11-05
  • 1970-01-01
  • 2013-07-13
  • 2011-01-06
  • 2015-04-07
  • 1970-01-01
  • 2021-07-14
相关资源
最近更新 更多