Python文件读取类型问题:列表存文件后读取变为字符串
解决读取文件时字符串转列表/元组的问题
你遇到的问题很典型——文件里存的是Python字面量形式的字符串,直接用split()拆分只会把结构拆得乱七八糟,因为它识别不了嵌套的括号、元组这些语法。这里给你一个靠谱的解决方案:
用ast.literal_eval()还原真实对象
Python的ast模块里的literal_eval()方法专门用来把字符串形式的Python字面量(列表、元组、字典、字符串等)转换成真实的Python对象,而且比直接用eval()安全得多(不会执行恶意代码)。
修改后的脚本代码
import ast import pandas as cool # 假设你之前用的cool是pandas的别名 def tabBinaire(): with open("data", "r") as f: for line in f: # 先去掉行首尾的空白字符,再转成真实的列表对象 defi = ast.literal_eval(line.strip()) print(defi) # 现在这是和原列表完全一致的对象,里面是元组 # 处理成DataFrame并生成哑变量 # 先把每个元组转成可迭代对象,再构造DataFrame df = cool.DataFrame([list(tup) for tup in defi]) output = df.stack().str.get_dummies().sum(level=0) print(output)
为什么原来的split()不行?
你原来用line.split(",")会把所有逗号都当作分隔符,比如原内容里的(u'Dan', u'Alon', u'Carla',)会被拆成['(u\'Dan\'', " u'Alon'", " u'Carla'", ')']这种零散的片段,完全破坏了原来的列表/元组结构,自然没法和原列表一致。
而ast.literal_eval()会完整解析字符串里的Python语法结构,准确还原出原来的列表和里面的元组,这样后续的DataFrame操作就能正常运行了。
内容的提问来源于stack exchange,提问作者HugoV
相关产品推荐
相关产品推荐

