如何将 .csv 字符串列表表示形式转换为列表?
How to transform a .csv string list representation to list?
假设一个 .csv
文件如下所示:
- title: 是列的名称
- 并且
[senior innovation manager]
是第一行。
注意:两个字符串(标题和行)看起来与这里写的完全一样。
title
[senior innovation manager]
想法是将此列表字符串表示形式转换为实际的 python 列表:
import ast
import pandas as pd
import numpy as np
# read the file
df = pd.read_csv(file_path, sep=',', na_values='NA', encoding='latin-1')
# convert first row to actual python list
df['title'][0]=ast.literal_eval(df['title'][0])
# inspect if ast.literal_eval() converted to actual list:
print(df['title'][0])
print(type(df['title'][0]))
但是当尝试上面的代码时出现下一个错误:
Traceback (most recent call last):
File "file_path", line 76, in <module>
df['title'][0]=ast.literal_eval(df['title'][0])
File "C:\Users\id\Anaconda3\lib\ast.py", line 46, in literal_eval
node_or_string = parse(node_or_string, mode='eval')
File "C:\Users\id\Anaconda3\lib\ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 1
[senior innovation manager]
此错误的性质是什么?
是否可以转换此列表字符串表示形式
到实际的 python 列表?
我认为将其视为 CSV 文件或使用 pandas 没有任何优势。您可以简单地阅读文件的第二行并删除不需要的内容。您可以通过从第二个字符到结束前的一个字符之间抓取一个片段来做到这一点。在 python 列表语法中,即 1:-1
.
with open(file_path) as fileobj:
# skip title
fileobj.readline()
# get data
title_list = [fileobj.readline().strip()[1:-1]]
为了使用 literal_eval
,您的字符串必须完全按照在代码中编写的方式编写。也就是说,列表中包含的字符串值必须用引号括起来并用逗号分隔。所以你的字符串应该看起来像这样 ['senior', 'innovation', 'manager']
如果您打算使用此方法,您可以尝试用 ', '
替换字符串中的空格,然后在打开和关闭括号之前添加最后两个引号。
假设一个 .csv
文件如下所示:
- title: 是列的名称
- 并且
[senior innovation manager]
是第一行。
注意:两个字符串(标题和行)看起来与这里写的完全一样。
title
[senior innovation manager]
想法是将此列表字符串表示形式转换为实际的 python 列表:
import ast
import pandas as pd
import numpy as np
# read the file
df = pd.read_csv(file_path, sep=',', na_values='NA', encoding='latin-1')
# convert first row to actual python list
df['title'][0]=ast.literal_eval(df['title'][0])
# inspect if ast.literal_eval() converted to actual list:
print(df['title'][0])
print(type(df['title'][0]))
但是当尝试上面的代码时出现下一个错误:
Traceback (most recent call last):
File "file_path", line 76, in <module>
df['title'][0]=ast.literal_eval(df['title'][0])
File "C:\Users\id\Anaconda3\lib\ast.py", line 46, in literal_eval
node_or_string = parse(node_or_string, mode='eval')
File "C:\Users\id\Anaconda3\lib\ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 1
[senior innovation manager]
此错误的性质是什么?
是否可以转换此列表字符串表示形式 到实际的 python 列表?
我认为将其视为 CSV 文件或使用 pandas 没有任何优势。您可以简单地阅读文件的第二行并删除不需要的内容。您可以通过从第二个字符到结束前的一个字符之间抓取一个片段来做到这一点。在 python 列表语法中,即 1:-1
.
with open(file_path) as fileobj:
# skip title
fileobj.readline()
# get data
title_list = [fileobj.readline().strip()[1:-1]]
为了使用 literal_eval
,您的字符串必须完全按照在代码中编写的方式编写。也就是说,列表中包含的字符串值必须用引号括起来并用逗号分隔。所以你的字符串应该看起来像这样 ['senior', 'innovation', 'manager']
如果您打算使用此方法,您可以尝试用 ', '
替换字符串中的空格,然后在打开和关闭括号之前添加最后两个引号。