在Python中快速导入文本文件的方法是什么?

0 投票
3 回答
524 浏览
提问于 2025-04-18 03:56

我有一个普通的文本文件,里面是一串数字,每行一个。我需要把这些数字导入到一个列表里。我现在正在学习Python,不太确定有什么快速或者“标准”的方法来做到这一点(另外,我之前用R,所以习惯了用scanreadLines函数,这样做起来非常简单)。

这个文件的内容是这样的(注意:这不是一个csv文件,逗号是小数点):

204,00
10,00
10,00
10,00
10,00
11,00
70,00
276,00
58,00
...

因为它用逗号代替了小数点,所以我想这个任务可能会有点难,但应该大致上还是差不多,对吧?

这是我现在的解决方案,我觉得有点麻烦:

f = open("some_file", "r")
data = f.read().replace('\n', '|')
data = data[0:(len(data) - 2)].replace(',', '.')
data = data.split('|')
x = range(len(data))
for i in range(len(data)):
    x[i] = float(data[i])

提前谢谢你们。

3 个回答

0

如果想要更简单的方法,你可以这样做:

Read = []
with open('File.txt', 'r') as File:
    Read = File.readLines()

for A in Read:
    print A

这里的“with open()”会打开文件,并在读完后自动关闭。这种做法是比较好的,没记错的话。

接着,For循环会逐行读取文件内容并打印出来。

1

bsoist的回答如果地区设置正确的话是很不错的。如果没有正确设置,你可以简单地把整个文件读进来,然后根据换行符(\n)进行分割,接着用列表推导式来进行替换。

with open('some_file.txt', 'r') as datafile:
    data = datafile.read()

x = [float(value.replace(",", ".")) for value in data.split('\n')]
1

更新

我之前没注意到逗号是小数点的分隔符。如果地区设置正确,像这样的代码应该可以正常工作。

lines = [locale.atof(line.strip()) for line in open(filename)]

如果不行,你可以试试下面的代码。

lines = [float(line.strip().replace(',','.')) for line in open(filename)]

lines = [line.strip() for line in open(filename)]

如果你想把数据当作数字来处理……

lines = [map(float,line.strip().split(',')) for line in open(filename)]
  • 根据下面前两个评论进行了修改

撰写回答