假設一個.csv檔案如下所示:
- 標題:是列的名稱
- 并且
[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 串列?
uj5u.com熱心網友回復:
我認為將其視為 CSV 檔案或使用 Pandas 沒有任何優勢。您可以簡單地閱讀檔案的第二行并洗掉不需要的內容。您可以通過從第二個字符到最后一個字符的切片來做到這一點。在 python 串列語法中,就是1:-1.
with open(file_path) as fileobj:
# skip title
fileobj.readline()
# get data
title_list = [fileobj.readline().strip()[1:-1]]
uj5u.com熱心網友回復:
為了使用literal_eval您的字串,必須完全按照它在代碼中的方式撰寫。也就是說,串列中包含的字串值必須用引號引起來并用逗號分隔。所以你的字串應該看起來像這樣['senior', 'innovation', 'manager']
如果你開始使用這種方法,你可以嘗試替換字串中的空格', ',然后在打開括號之后和關閉括號之前添加最后兩個引號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/366349.html
