如何从 Python 中的任意换行符开始从文件中读取行
How to read lines from file starting from arbitrary newline in Python
我有一个文件的格式是用新行分隔的,如下所示
1 1 1 1
2 2 2 2 2 2 2
3 3 3 3 3 3
我想分别读取行,例如,从第二行开始,并将它们保存在一个数组中。我想我可以管理最后一部分,但我不知道如何从文件的第 n 个换行符开始阅读。
关于我该怎么做的任何想法?
谢谢。
最好的问候。
由于文件在 python 中是可迭代的,因此您可以对其调用 next
以跳过第一行,例如:
with open('data.txt', 'r') as data:
next(data)
for line in data:
print line.split()
会产生:
['2', '2', '2', '2', '2', '2', '2']
['3', '3', '3', '3', '3', '3']
参考文献:
lines = open('test.txt', 'r').readlines()
# n is your desired line
for lineno in range(n-1, len(lines)):
print list(lines[lineno].strip())
您不能直接跳转到特定行。您必须阅读前 n 行:
n = 1
with open('data.txt', 'r') as data:
for idx, _ in enumerate(data):
if idx == n:
break
for line in data:
print line.split()
嗯,你可以这样做:
n1, n2 = 0, 2
with open('filename.txt') as f:
print '\n'.join(f.read().split('\n')[n1:n2+1])
这将产生(根据您发布的文件中的内容)这样的输出:
1 1 1 1
2 2 2 2 2 2 2
3 3 3 3 3 3
编辑 1:
@mic-tiz 根据您在下面发表的评论,我了解到您希望将文本文件中的所有数字放入一个数组中。
with open('filename.txt') as f:
array = [i for i in f.read() if not i == ' ']
您提到的这段代码会生成一个列表 array
array = ['1', '1', '1', '1', '\n', '2', '2', '2', '2', '2', '2', '2', '\n', '3', '3', '3', '3', '3', '3']
然后,您可以通过在出现 \n
个字符时拆分元素来打印元素。
编辑 2:
您可以使用以下代码将这些数字保存在字典中
d = {}
with open('filename.txt') as f:
array = f.read().split('\n')
for i in range(len(array)):
d['l%r'%i] = [int(j) for j in array[i] if not j == ' ']
这将产生 d = {'l2': [3, 3, 3, 3, 3, 3], 'l0': [1, 1, 1, 1], 'l1': [2, 2, 2, 2, 2, 2, 2]}
你可以使用itertool.islice
,例如:
from itertools import islice
with open('filename') as fin:
wanted = islice(fin, 1, None) # change 1 to lines to skip
data = [line.split() for line in wanted]
我有一个文件的格式是用新行分隔的,如下所示
1 1 1 1
2 2 2 2 2 2 2
3 3 3 3 3 3
我想分别读取行,例如,从第二行开始,并将它们保存在一个数组中。我想我可以管理最后一部分,但我不知道如何从文件的第 n 个换行符开始阅读。 关于我该怎么做的任何想法? 谢谢。 最好的问候。
由于文件在 python 中是可迭代的,因此您可以对其调用 next
以跳过第一行,例如:
with open('data.txt', 'r') as data:
next(data)
for line in data:
print line.split()
会产生:
['2', '2', '2', '2', '2', '2', '2']
['3', '3', '3', '3', '3', '3']
参考文献:
lines = open('test.txt', 'r').readlines()
# n is your desired line
for lineno in range(n-1, len(lines)):
print list(lines[lineno].strip())
您不能直接跳转到特定行。您必须阅读前 n 行:
n = 1
with open('data.txt', 'r') as data:
for idx, _ in enumerate(data):
if idx == n:
break
for line in data:
print line.split()
嗯,你可以这样做:
n1, n2 = 0, 2
with open('filename.txt') as f:
print '\n'.join(f.read().split('\n')[n1:n2+1])
这将产生(根据您发布的文件中的内容)这样的输出:
1 1 1 1
2 2 2 2 2 2 2
3 3 3 3 3 3
编辑 1:
@mic-tiz 根据您在下面发表的评论,我了解到您希望将文本文件中的所有数字放入一个数组中。
with open('filename.txt') as f:
array = [i for i in f.read() if not i == ' ']
您提到的这段代码会生成一个列表 array
array = ['1', '1', '1', '1', '\n', '2', '2', '2', '2', '2', '2', '2', '\n', '3', '3', '3', '3', '3', '3']
然后,您可以通过在出现 \n
个字符时拆分元素来打印元素。
编辑 2: 您可以使用以下代码将这些数字保存在字典中
d = {}
with open('filename.txt') as f:
array = f.read().split('\n')
for i in range(len(array)):
d['l%r'%i] = [int(j) for j in array[i] if not j == ' ']
这将产生 d = {'l2': [3, 3, 3, 3, 3, 3], 'l0': [1, 1, 1, 1], 'l1': [2, 2, 2, 2, 2, 2, 2]}
你可以使用itertool.islice
,例如:
from itertools import islice
with open('filename') as fin:
wanted = islice(fin, 1, None) # change 1 to lines to skip
data = [line.split() for line in wanted]