python 用一行(一个短语)而不是一个字符来分割文件

python Slicing a file with a line (a phrase) rather than a character

我查阅了切片文档,但仍然没有找到我需要的东西。我是初学者。

我有一个很大的文本文件。我想使用文档中重复出现的相同行对该文件进行切片。取其中的 2 行并将其保存在带编号的文件中)

我想我可以让我的保存循环工作,但我不知道如何切片文档。

类似于:

    for i in xrange(n):
    f = open("patent.data_"+str(i)+".dat","w")

我以为当我提取文件的各个部分时,我只是让一个计数器 运行 有了它 (n)。

有人可以向我提供帮助或 link 以便我解决这个问题吗?

祝福

PS:这是我更新的无效解决方案:

    f = open(PATENTS, 'r')
text =f.read()
text.split("\n "<?xml version="1.0" encoding="UTF-8"?>"\n")

好的,我用 .splitlines 试过了,我认为我更接近于将文本拆分成我想要的块的工作解决方案。这是我到目前为止所做的工作:

f = open(PATENTS, 'r')
text =f.read()
n=0
counter=0
textblock=[]
stext= text.splitlines()

for lines in stext:
    if stext[n]!='<?xml version="1.0" encoding="UTF-8"?>':
        textblock.append(stext[n])

    else:
        counter+=1
    n+=1
print counter
print textblock
f.close()

计数器给出了我想要获得的正确数量的文本块,而且 if 语句也有效。不幸的是,索引变量文本块是行不通的。我想到了类似的东西:

textblock[counter]

但这给了我一个错误"list index out of range"

好的切换到这样的元组列表:但现在不知道如何访问列表中的元组值:(

for lines in stext:
    if stext[n]!='<?xml version="1.0" encoding="UTF-8"?>':
        textblock.append((counter,stext[n]))

    else:
        counter+=1
    n+=1
print counter

您想要的 python 术语是 "splitting",而不是切片。由于您的分割模式是一整行,因此将整个文件读入一个字符串并将其分割成这样的块列表:

fp = open("pattern_data.txt")
text = fp.read()
fp.close()
parts = text.split('\n<?xml version="1.0" encoding="UTF-8"?>\n')

parts 现在是您的文件块列表。

请注意,split() 从结果中删除了拆分文本;那应该没问题,因为你知道它在哪里。另外,我写它的方式切割线必须 exactly 包含分割模式,没有别的(删除换行符 \n 如果可能有额外的 space 在该行的末尾,或者如果这不起作用)。如果您需要一个可能会有所不同的拆分模式,请使用 re.split 拆分正则表达式而不是固定字符串。

试试这个

from itertools import count
c = count(1)
with open("mainfile.txt") as f:
    temp = []
    filenum = next(c)
    for i in f:
        if i in temp:
            temp = []
            filenum = next(c)
        temp.append(i)
        with open("patent.data_"+str(filenum)+".dat","a") as f1:
            f1.write(str(i))