【问题标题】:Working with lists in .csv columns in Python在 Python 中使用 .csv 列中的列表
【发布时间】:2021-05-05 10:56:28
【问题描述】:

我正在做一个涉及 .csv 文件中的小型数据库的项目。我有csv 模块。 该文件有四列:

word_number;sentence;pronoun;variants

我需要能够向它写入一个列表列表(其中每个列表包含一行),然后,如果需要,可以取回这个列表列表。 问题是,第二列和第四列也必须包含列表......并且由于引用它们变成了字符串。我尝试为读取器和写入器使用这些参数集:

(csvfile, quoting=csv.QUOTE_NONE, delimiter=";", escapechar=' ',)
(csvfile, quoting=csv.QUOTE_NONE, delimiter=';', quotechar='',escapechar='\\')

而且它们都没有帮助。 这两列中的列表中的字符串可能包含逗号和撇号,所以我也在尝试覆盖它。

对不起,如果这是一个愚蠢的问题,但我只是不明白 QUOTE_NONE 应该做什么了,这一切对我来说开始变得毫无意义。

列表列表示例:

[[1, ['У', 'мене', 'не', '(', 'є', ')', 'велика', "сім'я", '.'], 'мене', ['я', 'мені']], 
[0, ['Моя', "сім'я", '—', 'це', 'я', ',', 'мама', 'і', 'тато', '.'], 'Моя', ['Моєї', 'Моїй', 'Мою']], 
[3, ['Моя', "сім'я", '—', 'це', 'я', ',', 'мама', 'і', 'тато', '.'], 'це', ['цього', 'цьому', 'цім']], 
[4, ['Моя', "сім'я", '—', 'це', 'я', ',', 'мама', 'і', 'тато', '.'], 'я', ['мене', 'мені']], 
[0, ['Мого', 'тата', 'звати', 'Іван', '.'], 'Мого', ['Мій', 'Моєму']]]

在 .csv 文件中是这样的:

1;['У',  'мене',  'не',  '(',  'є',  ')',  'велика',   "сім'я ",  '.'];мене;['я',  'мені']
0;['Моя',   "сім'я ",  '—',  'це',  'я',  ',',  'мама',  'і',  'тато',  '.'];Моя;['Моєї',  'Моїй',  'Мою']
3;['Моя',   "сім'я ",  '—',  'це',  'я',  ',',  'мама',  'і',  'тато',  '.'];це;['цього',  'цьому',  'цім']
4;['Моя',   "сім'я ",  '—',  'це',  'я',  ',',  'мама',  'і',  'тато',  '.'];я;['мене',  'мені']
0;['Мого',  'тата',  'звати',  'Іван',  '.'];Мого;['Мій',  'Моєму']

它从文件中读取到这个:

['1', '[\'У\', \'мене\', \'не\', \'(\', \'є\', \')\', \'велика\', "сім\'я", \'.\']', 'мене', "['я', 'мені']"]
['0', '[\'Моя\', "сім\'я", \'—\', \'це\', \'я\', \',\', \'мама\', \'і\', \'тато\', \'.\']', 'Моя', "['Моєї', 'Моїй', 'Мою']"]
['3', '[\'Моя\', "сім\'я", \'—\', \'це\', \'я\', \',\', \'мама\', \'і\', \'тато\', \'.\']', 'це', "['цього', 'цьому', 'цім']"]
['4', '[\'Моя\', "сім\'я", \'—\', \'це\', \'я\', \',\', \'мама\', \'і\', \'тато\', \'.\']', 'я', "['мене', 'мені']"]
['0', "['Мого', 'тата', 'звати', 'Іван', '.']", 'Мого', "['Мій', 'Моєму']"]

这是一种西里尔语言,如果阅读有问题,我很抱歉。如果需要,我想我可以用拉丁字母做例子。

我在想也许只是以某种方式将那些列表转换为字符串?但我真的不知道该怎么做。剥离 [] 中的每一个,然后使用 re.split? 用引号、空格和逗号的组合分割?猜猜它可以像那样工作,但我相信用 .csv 解决这个问题会更容易更好。

如果有任何帮助,我将不胜感激!

【问题讨论】:

  • 你愿意使用图书馆吗?例如。熊猫?它将降低解决方案的复杂性。
  • @Andreas 是的,当然!
  • 你想把列表的字符串转回列表,对吧?
  • @KnowledgeGainer 基本上,是的。我的列表被引用并变成了一个字符串,所以我需要阻止它这样做,或者稍后找到一种方法来扭转这个过程

标签: python csv


【解决方案1】:

要将列表字符串转换回列表,您可以这样做:

import ast
a = "['я', 'мені']"
a = ast.literal_eval(a)
print(a,type(a))

输出:

['я', 'мені'] <class 'list'>

您可以在此处查看此函数的文档: https://docs.python.org/3/library/ast.html#ast.literal_eval

【讨论】:

  • 抱歉,我花了这么长时间才回答,我必须更改代码中的其他问题以检查这是否有效,但我在项目外部进行了检查,在我看来它确实有效!当我确定后将标记为解决方案,但已经谢谢!
  • @lithium 是的,请告诉我,很高兴为您提供帮助。
猜你喜欢
  • 2012-11-13
  • 1970-01-01
  • 2013-12-20
  • 2021-07-22
  • 2018-09-22
  • 1970-01-01
  • 2015-05-17
  • 2013-07-16
  • 1970-01-01
相关资源
最近更新 更多