在 Python 中,如何从 txt 文件中读取未知行数?
In Python, how can I read a yet-unknown number of lines from a txt file?
这是用例。我有一个可能有数十万行的文本文件,其中:
第一行包含整数 N,这是后面的行数。我知道如何读取第一行并将其转换为 int;但是,我已经搜索了一种方法来从文件中读取该行数但没有成功。
例如:
input.txt
4
foo
bar
carrot
snowflake
我将读取这些行并将其存储在变量中。没有空行。
如何从我的文本文件中获取接下来的 N 行,最好以 Pythonic 方式获取?
这是一种方法:
with open('file.txt') as f:
n = int(next(f))
lst = [next(f).strip() for i in range(n)]
您也可以选择忽略行数:
with open('file.txt') as f:
n = int(next(f))
lst = [line.strip() for line in f]
在这两种情况下:
>>> n
4
>>> lst
['foo', 'bar', 'carrot', 'snowflake']
您可以使用从 1 开始枚举的 for 循环,并在行号达到所需数量时中断。
例子-
with open('<filename>','r') as f:
file_list = []
numlines = int(f.readline())
for i, line in enumerate(f, 1):
file_list.append(line.strip())
if i >= numlines:
break
另一种使用列表理解和 file.readline()
-
的方法
with open('<filename>','r') as f:
numlines = int(f.readline())
file_list = [f.readline().strip() for _ in range(numlines)]
您可以使用 enumerate 来遍历行并从 1 开始给出索引,当达到所需的索引时您可以停止迭代
with open("coursera.txt") as inp:
check=int(inp.next().strip())
print check
for line,value in enumerate(inp,1):
print line,value
if line==a:
break
输出:
4
1 apple
2 cab
3 daog
4 bad
要删除额外的新行,您可以 strip
在打印或执行其他操作时添加这些行
您可以使用 itertools.islice,使用 next 获取 n
以获取第一行,然后将 n
传递给 islice 以获取下一个 n
行:
from itertools import islice
with open("in.txt") as f:
n = int(next(f))
lines = list(islice(f, n))
您也可以只遍历 islice 对象:
with open("in.txt") as f:
n = int(next(f))
for line in islice(f,n):
print(line)
这是用例。我有一个可能有数十万行的文本文件,其中: 第一行包含整数 N,这是后面的行数。我知道如何读取第一行并将其转换为 int;但是,我已经搜索了一种方法来从文件中读取该行数但没有成功。
例如: input.txt
4
foo
bar
carrot
snowflake
我将读取这些行并将其存储在变量中。没有空行。
如何从我的文本文件中获取接下来的 N 行,最好以 Pythonic 方式获取?
这是一种方法:
with open('file.txt') as f:
n = int(next(f))
lst = [next(f).strip() for i in range(n)]
您也可以选择忽略行数:
with open('file.txt') as f:
n = int(next(f))
lst = [line.strip() for line in f]
在这两种情况下:
>>> n
4
>>> lst
['foo', 'bar', 'carrot', 'snowflake']
您可以使用从 1 开始枚举的 for 循环,并在行号达到所需数量时中断。
例子-
with open('<filename>','r') as f:
file_list = []
numlines = int(f.readline())
for i, line in enumerate(f, 1):
file_list.append(line.strip())
if i >= numlines:
break
另一种使用列表理解和 file.readline()
-
with open('<filename>','r') as f:
numlines = int(f.readline())
file_list = [f.readline().strip() for _ in range(numlines)]
您可以使用 enumerate 来遍历行并从 1 开始给出索引,当达到所需的索引时您可以停止迭代
with open("coursera.txt") as inp:
check=int(inp.next().strip())
print check
for line,value in enumerate(inp,1):
print line,value
if line==a:
break
输出:
4
1 apple
2 cab
3 daog
4 bad
要删除额外的新行,您可以 strip
在打印或执行其他操作时添加这些行
您可以使用 itertools.islice,使用 next 获取 n
以获取第一行,然后将 n
传递给 islice 以获取下一个 n
行:
from itertools import islice
with open("in.txt") as f:
n = int(next(f))
lines = list(islice(f, n))
您也可以只遍历 islice 对象:
with open("in.txt") as f:
n = int(next(f))
for line in islice(f,n):
print(line)