python - 如何以智能的方式读取和拆分 csv 文件?
问题描述
我在读取 csv 并将其拆分时遇到问题。我想读取所有行看起来像这样的 csv 文件:
一二三四五六]”
我想逐行阅读并将条目分开。不幸的是,"和[对我来说很复杂。到目前为止,我的读者只要看到逗号就会分裂,但后来我得到了类似"[four,而实际上我想删除"和[(以及分别]和末尾的" )。所以我想得到的结果应该是这样的:
[一二三四五六]
到目前为止,我知道我可以通过拆分然后剪切该行的特定元素的第一个(或最后一个字母)来做到这一点。但我想知道是否有一些聪明的技巧或想法,看起来并不那么笨拙。
解决方案
我认为您已尝试自行解析 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']
希望这个编辑的答案解释了解决这个问题的方法
推荐阅读
- c# - 在 QC 复选框列表 Unity 上添加分数
- sql - 在 ADODB.Connection 中使用“NOT IN”选择
- recharts - Recharts 自定义 X 轴
- ios - 如何将tableview的索引访问到下一个vc
- embedded - stm32即使没有写入也会擦除闪存吗?
- kubernetes - 使用应用程序负载均衡器 | 舵图 | AWS
- c - 使用带参数的 perror
- python-3.6 - Django 2.0 到 2.2 升级 centos7
- database - 如何按计数或等式过滤(Azure)Edm.String 集合?
- node.js - nodejs electronjs sqlite3 - 使用未声明的标识符'napi_is_detached_arraybuffer'