首页 > 解决方案 > 如何以智能的方式读取和拆分 csv 文件?

问题描述

我在读取 csv 并将其拆分时遇到问题。我想读取所有行看起来像这样的 csv 文件:

一二三四五六]”

我想逐行阅读并将条目分开。不幸的是,"[对我来说很复杂。到目前为止,我的读者只要看到逗号就会分裂,但后来我得到了类似"[four,而实际上我想删除"[(以及分别]和末尾的" )。所以我想得到的结果应该是这样的:

[一二三四五六]

到目前为止,我知道我可以通过拆分然后剪切该行的特定元素的第一个(或最后一个字母)来做到这一点。但我想知道是否有一些聪明的技巧或想法,看起来并不那么笨拙。

标签: pythoncsvsplit

解决方案


认为您已尝试自行解析 CSV 文件。使用 Python csv 模块要简单得多,我建议改用该方法。

打印 csv 文件的所有行的代码示例:

import csv
with open('file.csv', 'r') as csvfile: # opens the file
    csvreader = csv.reader(csvfile)    # reads the file
    for row in csvreader:              # prints rows
        print(row)

# output for your values: ['one', 'two', 'three', '[four, five, six]']

使用类似的代码来获取每一行的列表,然后您可以解析代表其他三个值的最终字符串值,“[四、五、六]”。解析该字符串的代码可能如下所示:

initialString = '[four, five, six]'
list = initialString.strip('][').split(', ')
# result is ['four', 'five', 'six']

最后,您可以连接两个列表以形成一个更大的列表:

list1 = ['one', 'two', 'three']
list2 = ['four', 'five', 'six']
finallist = list1 + list2
# finallist is ['one', 'two', 'three', 'four', 'five', 'six']

编辑:使用上述方法的完整代码示例:

import csv
with open('file.csv', 'r') as csvfile:         
    csvreader = csv.reader(csvfile)           
    for row in csvreader:                      
        result = [row[0], row[1], row[2]] + row[3].strip('][').split(', ')
        print(result)

# result is a list ['one', 'two', 'three', 'four', 'five', 'six']

假设您希望结果与该列表类似,但字符串两边都带有方括号。那么我能想到的用上面的代码做到这一点的最简单的方法是:

resultStr = '['
for number in result:
    resultStr = resultStr + number + ', '

resultStr.strip()
resultStr = resultStr + ']'
# resultStr = '[one, two, three, four, five, six]'

请记住,您必须将其放在上面完整代码示例的 for 循环中,才能以这种格式打印每一行完整的数据。

说明: 下面是如何工作的?

结果 = [row[0], row[1], row[2]] + row[3].strip('][').split(', ')

首先,它获取拆分列表的前 3 个值,“一”、“二”和“三”,并用这 3 个值(额外的方括号)创建一个列表。然后,它将这个列表与通过拆分第四个值创建的另一个列表组合在一起,形成一个完整的列表,['one', 'two', 'three', 'four', 'five', 'six']

希望这个编辑的答案解释了解决这个问题的方法


推荐阅读