在python中读取特定数量的行
我有大数据文本文件,例如:在python中读取特定数量的行,python,data-mining,large-data,Python,Data Mining,Large Data,我有大数据文本文件,例如: #01textline1 1 2 3 4 5 6 2 3 5 6 7 3 3 5 6 7 6 4 4 6 7 8 9 9 1 2 3 6 4 7 3 5 7 7 8 4 4 6 6 7 8 5 3 4 5 6 7 8 4 6 7 8 8 9 .. .. 每行末尾都有一个换行符,因此: if line == "#03textline3": 将永远不会为真,因为该行实际上是“#03textline3\n”。为什么不使用与“#02textline2”相同的语法?这本
#01textline1
1 2 3 4 5 6
2 3 5 6 7 3
3 5 6 7 6 4
4 6 7 8 9 9
1 2 3 6 4 7
3 5 7 7 8 4
4 6 6 7 8 5
3 4 5 6 7 8
4 6 7 8 8 9
..
..
每行末尾都有一个换行符,因此:
if line == "#03textline3":
将永远不会为真,因为该行实际上是“#03textline3\n”
。为什么不使用与“#02textline2”
相同的语法?这本可以奏效的:
if "#03textline3" in line: # Or ' line == "#03textline3\n" '
break;
此外,您必须更正
always\u print=True
行的缩进。每行末尾都有一个换行符,因此:
if line == "#03textline3":
将永远不会为真,因为该行实际上是“#03textline3\n”
。为什么不使用与“#02textline2”
相同的语法?这本可以奏效的:
if "#03textline3" in line: # Or ' line == "#03textline3\n" '
break;
此外,您必须更正
always\u print=True
行的缩进。您不需要循环来实现您的目的。只需使用列表中的index
函数即可获得两行的索引,并获取它们之间的所有行
请注意,我将您的文件.readlines()
更改为删除尾随的换行符
< >代码>文件.Read().SPLILLIN()/Cyto>可能失败,如果<代码> Read()/Case>在数据行的中间结束。< /P>
您不需要一个循环来实现您的目的。只需使用列表中的
index
函数即可获得两行的索引,并获取它们之间的所有行
请注意,我将您的文件.readlines()
更改为删除尾随的换行符
< >代码>文件.Read().SPLILLIN()/Cyto>可能失败,如果<代码> Read()/Case>在数据行的中间结束。< /P>
以下是我的建议:
firstKey = "#02textline2"
secondKey = "#03textline3"
with open("data.txt","r") as fread:
for line in fread:
if line.rstrip() == firstKey:
break
with open("newdata.txt","w") as fwrite:
for line in fread:
if line.rstrip() == secondKey:
break
else:
fwrite.write(line)
这种方法利用了Python将文件视为迭代器这一事实。第一个for
循环遍历文件迭代器f
,直到找到第一个键。循环中断,但迭代器保持当前位置。当它被拾起时,第二个循环从第一个放卷的地方开始。然后,我们直接将您想要的行写入一个新文件,并丢弃其余的行
优势:
- 这不会将整个文件加载到内存中,脚本只存储
和firstKey
之间的行,并且只读取secondKey
之前的行secondKey
- 没有条目被检查或处理一次以上
- 上下文管理器是使用文件的更安全的方法
- 以下是我的建议:
firstKey = "#02textline2"
secondKey = "#03textline3"
with open("data.txt","r") as fread:
for line in fread:
if line.rstrip() == firstKey:
break
with open("newdata.txt","w") as fwrite:
for line in fread:
if line.rstrip() == secondKey:
break
else:
fwrite.write(line)
这种方法利用了Python将文件视为迭代器这一事实。第一个for
循环遍历文件迭代器f
,直到找到第一个键。循环中断,但迭代器保持当前位置。当它被拾起时,第二个循环从第一个放卷的地方开始。然后,我们直接将您想要的行写入一个新文件,并丢弃其余的行
优势:
- 这不会将整个文件加载到内存中,脚本只存储
和firstKey
之间的行,并且只读取secondKey
之前的行secondKey
- 没有条目被检查或处理一次以上
- 上下文管理器是使用文件的更安全的方法