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))
我查阅了切片文档,但仍然没有找到我需要的东西。我是初学者。
我有一个很大的文本文件。我想使用文档中重复出现的相同行对该文件进行切片。取其中的 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))