gpt4 book ai didi

python - 在不使用 CSV 模块的情况下将 CSV 解析为元组列表

转载 作者:行者123 更新时间:2023-11-30 23:07:15 27 4
gpt4 key购买 nike

我目前正在Python类(class)中完成一项作业,其中一个特定部分要求我导入一个CSV文件(数据格式为“文本,数字,数字,...,数字, number”),而不使用 CSV 模块(事实上,根本不使用任何模块),并将数据作为元组列表返回,格式如下:

[(’Text’, [number, number, ..., number, number]),
(’Text’, [number, number, ..., number, number]),
.....]

我认为我已经了解了打开文件并开始正确地逐行读取它的实际过程(请参见下面的代码片段),但我不太确定如何继续将每一行解析为需要的格式。

def load_data(filename):
open(filename)
for line in filename

我尝试过寻找帮助,但我似乎能找到的唯一帮助是只使用 CSV 模块(这不是特别有用,因为我们不允许导入除数学库之外的任何模块)或者有以不同格式输入和/或输出的数据。如果有人能给我一些关于我应该做什么或我可以从哪里开始的指示,那将非常有帮助。谢谢!

编辑:根据@dotancohen 提出的建议,这里是一些示例数据:

Slow Loris, 21.72, 29.3, 20.08, 29.98, 29.85, 26.22, 29.68
Ocelot, 57.51, 47.59, 55.89, 47.15, 46.71, 51.7, 46.68, 54.54
Tiger, 75.0, 82.43, 112.11, 89.93, 103.19, 80.6, 113.44, 75.55, 102.29, 108.1, 98.84, 101.48, 77.75, 98.57, 70.31, 78.28, 80.18

下面是我目前的潜在解决方案:

def load_data(filename):
open(filename) as file
output = []
for line in filename
temp_list = line.split(',')
temp_item = temp_list.pop(0)
tup = (temp_item, temp_list)
output.append(tup)
return output

最佳答案

CSV 文件的行通常用逗号或制表符分隔,因此在简单情况下,这将为您提供不同的字段:

for line in filename:
fields = line.split(',') # For comma-delimited files
# - or -
fields = line.split('\t') # For tab-delimited files

但是,我们很少允许自己如此天真。 CSV 文件具有以下注意事项:

  1. 引用值:这是 CSV 中的合法字段:“我思故我在”。您需要小心不要用引号内的逗号分隔。换行符也可能出现在带引号的值中,因此您无法可靠地天真地使用for line in filename
  2. 引用值中的转义引号:这是 CSV 中的合法字段:“She said\"I think so\"”。这意味着用于匹配每个字符的引用外引用状态的状态机也需要一个回溯机制。

因此,为了可靠地解析 CSV 文件,您需要一个状态机来保存文件中各行的状态。一路上会出现可怕的意外,例如在 Python 2 中处理 Unicode CSV 文件(提示:如果您有非 ASCII 文本,请使用 Python 3)。还有一些小惊喜,例如某些应用程序在逗号分隔符后添加了空格,或者不在行尾的空白字段中添加逗号。

因此,如果您要接受 CSV 文件作为用户的输入,请使用 CSV 模块。但是,如果您可以控制输入(即从另一个脚本生成输入),那么您可以使用简单的 line.split('\t') 方法。

根据 OP 发布的示例数据,我们看到他不必担心带引号的字段,但他的 CSV 源实际上在逗号分隔符后添加了错误的空格。因此,这是针对 OP 情况的代码:

for line in filename:
fields = line.split(',')
fields = [x.strip() for x in fields] # Remove whitespace

关于python - 在不使用 CSV 模块的情况下将 CSV 解析为元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32305208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com