如何使用 Python 将文本文件读入列表或数组[重复]

2025-01-20 09:07:00
admin
原创
98
摘要:问题描述:我正在尝试将文本文件的行读入 python 中的列表或数组。我只需要能够在创建列表或数组后单独访问其中的任何项目。该文本文件的格式如下:0,0,200,0,53,1,0,255,...,0. 如上所述...,实际的文本文件有数百或数千个项目。我正在使用以下代码尝试将文件读入列表:text_file ...

问题描述:

我正在尝试将文本文件的行读入 python 中的列表或数组。我只需要能够在创建列表或数组后单独访问其中的任何项目。

该文本文件的格式如下:

0,0,200,0,53,1,0,255,...,0.

如上所述...,实际的文本文件有数百或数千个项目。

我正在使用以下代码尝试将文件读入列表:

text_file = open("filename.dat", "r")
lines = text_file.readlines()
print lines
print len(lines)
text_file.close()

我得到的输出是:

['0,0,200,0,53,1,0,255,...,0.']
1

显然,它将整个文件读入一个仅包含一个项目的列表,而不是单个项目的列表。我做错了什么?


解决方案 1:

您必须使用以下方法将字符串拆分为值列表split()

所以,

lines = text_file.read().split(',')

编辑:我没想到这会引起如此大的关注。这是一种更惯用的方法。

import csv
with open('filename.csv', 'r') as fd:
    reader = csv.reader(fd)
    for row in reader:
        # do something

解决方案 2:

你也可以使用 numpy loadtxt

from numpy import loadtxt
lines = loadtxt("filename.dat", comments="#", delimiter=",", unpack=False)

解决方案 3:

所以你想创建一个列表的列表...我们需要从一个空列表开始

list_of_lists = []

接下来,我们逐行读取文件内容

with open('data') as f:
    for line in f:
        inner_list = [elt.strip() for elt in line.split(',')]
        # in alternative, if you need to use the file content as numbers
        # inner_list = [int(elt.strip()) for elt in line.split(',')]
        list_of_lists.append(inner_list)

一个常见的用例是列式数据,但我们的存储单位是文件的行,我们逐行读取,因此您可能需要转置
列表列表。这可以用以下习语来完成

by_cols = zip(*list_of_lists)

另一个常见用途是给每一列命名

col_names = ('apples sold', 'pears sold', 'apples revenue', 'pears revenue')
by_names = {}
for i, col_name in enumerate(col_names):
    by_names[col_name] = by_cols[i]

这样你就可以对同类数据项进行操作

 mean_apple_prices = [money/fruits for money, fruits in
                     zip(by_names['apples revenue'], by_names['apples_sold'])]

我编写的大部分代码都可以使用标准库中的模块来加速csv。另一个第三方模块是pandas,它可以让您自动执行典型数据分析的大部分方面(但具有许多依赖项)。


更新虽然在 Python 2 中zip(*list_of_lists)返回不同的(转置的)列表列表,但在 Python 3 中情况已经改变并zip(*list_of_lists)返回一个不可下标的zip 对象。

如果您需要索引访问,则可以使用

by_cols = list(zip(*list_of_lists))

它为您提供了两个版本的 Python 中的列表列表。

另一方面,如果您不需要索引访问而您想要的只是构建一个按列名索引的字典,那么 zip 对象就足够了……

file = open('some_data.csv')
names = get_names(next(file))
columns = zip(*((x.strip() for x in line.split(',')) for line in file)))
d = {}
for name, column in zip(names, columns): d[name] = column

解决方案 4:

这个问题是询问如何将文件中以逗号分隔的值内容读入可迭代列表中:

0,0,200,0,53,1,0,255,...,0.

最简单的方法是使用csv如下模块:

import csv
with open('filename.dat', newline='') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',')

spamreader现在,您可以轻松地像这样进行迭代:

for row in spamreader:
    print(', '.join(row))

请参阅文档以获取更多示例。

解决方案 5:

我有点晚了,但您也可以将文本文件读入数据框,然后将相应的列转换为列表。

lista=pd.read_csv('path_to_textfile.txt', sep=",", header=None)[0].tolist() 

例子。

lista=pd.read_csv('data/holdout.txt',sep=',',header=None)[0].tolist()

注意:相应数据框的列名将采用整数形式,我选择 0,因为我只提取第一列

解决方案 6:

这样更好,

 def txt_to_lst(file_path):

    try:
        stopword=open(file_path,"r")
        lines = stopword.read().split('
')
        print(lines)

    except Exception as e:
        print(e)

解决方案 7:

您可以使用 Python 函数中的 build.eval()

with open('test.txt', 'r') as f:
    text = f.read()
    text_list = eval(text)

输出为:

text:     '[0,0,200,0,53,1,0,255]'
text_list: [0, 0, 200, 0, 53, 1, 0, 255]

Python 的 eval() 允许您从基于字符串或基于编译代码的输入中评估任意 Python 表达式。当您尝试从任何以字符串或编译代码对象形式出现的输入中动态评估 Python 表达式时,此函数会非常方便。源代码、文档

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用