【问题标题】:Ignoring commas in string literals while reading in .csv file without using any outside libraries在不使用任何外部库的情况下读取 .csv 文件时忽略字符串文字中的逗号
【发布时间】:2020-02-16 01:09:33
【问题描述】:

我正在尝试读取一个 .csv 文件,该文件的行如下所示:

"Red","Apple, Tomato".

我想将该行读入字典,使用“Red”作为键,使用“Apple,Tomato”作为定义。我也想在不使用任何需要导入的库或模块的情况下做到这一点。

我面临的问题是它试图将该行拆分为 3 个单独的部分,因为代码拆分的“Apple”和“Tomato”之间有一个逗号。这就是我现在拥有的:

file_folder = sys.argv[1]
file_path = open(file_folder+ "/food_colors.csv", "r")

food_dict = {}
for line in file_path:
    (color, description) = line.rstrip().split(',')
    print(f"{color}, {description}")

但这给了我一个错误,因为它有 3 条数据,但我只给它 2 个变量来存储信息。我怎样才能让它忽略字符串文字中的逗号?

【问题讨论】:

  • 我也想这样做而不使用任何需要导入的库或模块。 为什么?您始终可以编写自己的 CSV 解析器,但除非是出于娱乐/教育目的,否则我不明白这一点。
  • 您可以使用color, *description = line.rstrip().split(',') 之类的方式收集列表中剩余的拆分字符串。请注意description 之前的星号,它会成为一个列表。参见示例here
  • @AMC 这是学校的作业,这是限制之一
  • @BrentMB 啊,一个家庭作业问题。你需要更具体,然后,我们不能为你做你的任务。相关:meta.stackoverflow.com/questions/334822/….
  • @PaulRooney 这是解决此问题的好方法。然后我可以将字符串附加到列表中,将其从列表转换回字符串。谢谢!

标签: python csv split


【解决方案1】:

您可以将剩余的字符串收集到一个列表中,就像这样

color, *description = line.rstrip().split(',')

然后您可以将描述字符串重新组合在一起,为您的 dict 赋值

另一种方式

color, description = line.rstrip().split(',', 1)

这意味着您只执行一次拆分操作,字符串的其余部分保持未拆分。

【讨论】:

  • 您提供的两种解决方案都很有用。第一个允许在字符串文字中出现“n”个逗号,第二个只允许 1 个。后者对我的用例很有帮助,但两个答案都很棒!谢谢
【解决方案2】:

您可以使用pandas 包并使用pandas.DataFrame.read_csv

例如,这是有效的:

from io import StringIO
import pandas as pd

TESTDATA = StringIO('"Red","Apple, Tomato"')

df = pd.read_csv(TESTDATA, sep=",", header=None)

print(df)

【讨论】:

  • 我正在尝试在没有任何外部包的情况下这样做
  • @BrentMB:你在评论中这么说。如果您从一开始就将其添加到您的问题中会更好(包括这样做的正当理由,以防有人提出不可避免的后续问题......)。
  • @usr2564301 它在标题和问题正文中。它不是从一开始就存在的吗?
  • @BrentMB 我明白了。我为此道歉。仍然希望这可能会有所帮助!干杯!
猜你喜欢
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 2021-11-26
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2013-07-29
相关资源
最近更新 更多