python使用行(短语)而不是字符切片文件

时间:2015-04-08 09:51:32

标签: python slice

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

我有一个很大的文本文件。我想使用文档中重复的相同行来切割该文件。取这些行中的2行并将其保存在一个数字文件中)

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

类似的东西:

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

我认为当我提取文件的部分时,我只是让计数器运行它(n)。

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

祝福

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。我想到了类似的东西:

textblock[counter]

但是这给了我一个错误“列表索引超出范围”

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

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

2 个答案:

答案 0 :(得分:0)

你想要的python术语是&#34;分裂&#34;而不是切片。由于您的拆分模式是整行,因此将整个文件读入一个字符串并将其拆分为一个块列表,如下所示:

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

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

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

答案 1 :(得分:0)

试试这个

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))