gpt4 book ai didi

Python:将列表保存在不带引号的文件中?

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:44 26 4
gpt4 key购买 nike

我正在使用 csv 模块处理几个文本文件,但遇到了一些我无法理解的奇怪情况。到目前为止我的代码:

import csv

with open('file1.txt', 'r') as a:
with open('file2.txt', 'w+') as b:
reader = csv.reader(a, delimiter = '\t')
writer = csv.writer(b, delimiter = '\t', quoting = csv.QUOTE_NONE, escapechar = '')

for row in reader:
# Do stuff

writer.writerow(row)

# Check datatypes of each column
print(type(row))
print(type(row[0]))
print(type(row[1]))
print(type(row[2]))
print(type(row[3]))
print(type(row[4]))
print(row)

输出:

<type 'list'>
<type 'str'>
<type 'str'>
<type 'list'>
<type 'str'>
<type 'list'>
['blah', 'blah', ['01', '02', '03', '04'], 'blah', ['0', '0', '0', '0']]

我很高兴,直到我再次打开 file2.txt 进行进一步处理,但我不能,因为我得到了令人困惑的结果,所以我再次检查了类型,这次输出不同了。

with open('file2.txt', 'r+') as c:

reader = csv.reader(c, delimiter = '\t')

for row in reader:
print(row)
print(type(row))
print(type(row[0]))
print(type(row[1]))
print(type(row[2]))
print(type(row[3]))
print(type(row[4]))

输出:

['blah', 'blah', "['01', '02', '03', '04']", 'blah', "['0', '0', '0', '0']"]
<type 'list'>
<type 'str'>
<type 'str'>
<type 'str'>
<type 'str'>
<type 'str'>

注意第三个和第五个值周围的双引号。这些值是如何转换为字符串的!?这对我来说很奇怪。我确实需要将第三列和第五列设为列表类型而不是字符串,以便能够进一步处理它。

我的问题是如何将第三列和第五列的值转换回列表类型,或者更好的是如何防止它们首先保存为字符串?

如果我需要进一步澄清我的问题,请告诉我,并请帮助我处理这种情况。

编辑:所以,我了解到不可能阻止这些值存储为字符串,所以我现在正在考虑是否可以将这些值作为列表来处理。我真的不关心值如何存储在文件中,只要我将它们作为列表进行处理即可。

最佳答案

您无法阻止它们被保存为字符串。显然,CSV 是一个文本文件;它对列表一无所知。传递给 csv.writerow 的任何内容都将通过调用 str() 来转换为字符串。如果结果字符串包含逗号,它本身会被引用,以便很明显逗号是元素的一部分,而不是表示新元素的分隔符。

无法自动转换回列表。如果您知道每行的第 2 列应该是一个列表,您可以手动将其转换回来 - 一种方法是使用 ast.literal_eval

关于Python:将列表保存在不带引号的文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44685959/

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