为何整数列表写入文件后读取为字符串?如何获取整数列表?
问题:读取文本文件得到字符串列表而非整数列表的原因及解决方法
场景还原
用户将整数列表写入文本文件:
number = [3808640804, 552553035, 815157969, 1623809649, 1851153805, 4058081409, 2438887622, 2833416221, 1727496343, 3172042750] txt = f"H:\data_set\\testing\\1K\chunk.txt" with open(txt, 'w', encoding='utf-8', errors='ignore') as filee: for line in number: filee.write(f"{line}\n")
读取文件时得到字符串列表:
txt = f"H:\data_set\\testing\\1K\chunk.txt" with open(txt, 'r', encoding='utf-8', errors='ignore', buffering=100000) as filee: g = filee.readlines() print(type(g[1])) print(g[0:10])
输出:
<class 'str'> ['3808640804\n', '552553035\n', '815157969\n', '1623809649\n', '1851153805\n', '4058081409\n', '2438887622\n', '2833416221\n', '1727496343\n', '3172042750\n']
期望得到整数列表:[3808640804, 552553035, 815157969, 1623809649, 1851153805, 4058081409, 2438887622, 2833416221, 1727496343, 3172042750]
为什么读取结果是字符串?
文本文件本质是字符序列的集合,没有数据类型的概念。你写入文件时,是把每个整数转换成字符串(f"{line}")再加上换行符保存的,文件里存储的就是纯文本字符。当Python读取文件时,默认会把这些字符序列解析成字符串,不会自动识别并转换为整数——因为文件里没有记录“这是整数”的元信息。
另外注意:你用f"H:\data_set\\testing\\1K\chunk.txt"定义路径时,\t会被解析成制表符,可能导致路径错误,建议改用原始字符串(r"H:\data_set\testing\1K\chunk.txt")避免转义问题。
如何得到整数列表?
以下是几种简单高效的解决方法:
方法1:列表推导式(推荐)
遍历读取的每一行,先去掉换行符(strip()),再转换为整数。直接遍历文件对象无需一次性读入所有行,更节省内存:
txt = r"H:\data_set\testing\1K\chunk.txt" with open(txt, 'r', encoding='utf-8', errors='ignore') as filee: int_list = [int(line.strip()) for line in filee] print(int_list)
方法2:使用map函数
结合map和匿名函数处理换行符,再转成列表:
txt = r"H:\data_set\testing\1K\chunk.txt" with open(txt, 'r', encoding='utf-8', errors='ignore') as filee: int_list = list(map(lambda x: int(x.strip()), filee)) print(int_list)
方法3:先读取所有行再处理
如果你已经用readlines()获取了字符串列表,也可以事后转换:
txt = r"H:\data_set\testing\1K\chunk.txt" with open(txt, 'r', encoding='utf-8', errors='ignore') as filee: str_list = filee.readlines() int_list = [int(line.strip()) for line in str_list] print(int_list)
内容的提问来源于stack exchange,提问作者ya xi er
相关产品推荐
相关产品推荐

