Python 从文件中提取文本块
Python extracting blocks of text from a file
我需要从几个文件中提取两个文本块并使用 python 将它们放在单独的列表中。第一个块从第 30 行开始,并不太难提取。第二个块在第一个块之后的 2 行开始;问题是块可以是可变长度的。例如:
prj_files = [
line,
line,
etc
]
prj_files_2 = [
line,
etc
]
所以我需要将第一个块中 [] 之间的所有行放入一个列表中,并将第二个块中 [] 之间的所有行放入另一个列表中。截至目前,我使用:
for i, line in enumerate(prj):
if i > 29:
从特定行开始,然后它使用正则表达式找到它打破for循环的“]”并将它结束的行记录在cnt中。然后我使用另一个 for 循环从 cnt + 2 开始提取第二个块。虽然我认为这行得通,但我觉得它非常低效,因为我基本上是在做同样的事情两次。我是否缺少明显更好的方法?
编辑:所以我没有解析文件,而是尝试使用 import
。我确实认为它要简单得多,但由于我正在遍历一些文件以查找所有文件,所以我有一个代表文件名的通用变量。这意味着当我尝试使用变量导入文件时,我得到模块不存在的错误。因此,例如,我的变量名称是 py_file
,import
将其读取为 py_file
而不是实际路径值。有办法解决这个问题吗?
我想你的文件内容是:
prj_files = [
line,
line,
etc
]
prj_files_2 = [
line,
etc
]
那么你可以这样做:
exec open(YOUR_FILE).read()
f1 = open(FIRST_FILE,"w")
f2 = open(SECOND_FILE,"w")
for line in pjr_files:
f1.write(line)
for line in pjr_files_2:
f2.write(line)
我需要从几个文件中提取两个文本块并使用 python 将它们放在单独的列表中。第一个块从第 30 行开始,并不太难提取。第二个块在第一个块之后的 2 行开始;问题是块可以是可变长度的。例如:
prj_files = [
line,
line,
etc
]
prj_files_2 = [
line,
etc
]
所以我需要将第一个块中 [] 之间的所有行放入一个列表中,并将第二个块中 [] 之间的所有行放入另一个列表中。截至目前,我使用:
for i, line in enumerate(prj):
if i > 29:
从特定行开始,然后它使用正则表达式找到它打破for循环的“]”并将它结束的行记录在cnt中。然后我使用另一个 for 循环从 cnt + 2 开始提取第二个块。虽然我认为这行得通,但我觉得它非常低效,因为我基本上是在做同样的事情两次。我是否缺少明显更好的方法?
编辑:所以我没有解析文件,而是尝试使用 import
。我确实认为它要简单得多,但由于我正在遍历一些文件以查找所有文件,所以我有一个代表文件名的通用变量。这意味着当我尝试使用变量导入文件时,我得到模块不存在的错误。因此,例如,我的变量名称是 py_file
,import
将其读取为 py_file
而不是实际路径值。有办法解决这个问题吗?
我想你的文件内容是:
prj_files = [
line,
line,
etc
]
prj_files_2 = [
line,
etc
]
那么你可以这样做:
exec open(YOUR_FILE).read()
f1 = open(FIRST_FILE,"w")
f2 = open(SECOND_FILE,"w")
for line in pjr_files:
f1.write(line)
for line in pjr_files_2:
f2.write(line)