问候,SO
我是python和Perl的新手。我一直试图解决一个简单的问题,并用语法打结。我希望有人有时间和耐心帮助。 我有一个“.txt”格式的25mb文件,其中包含可追溯到1970年的新闻报道。每个新闻故事都连接到下一个,只有“版权”声明来划分。每个新闻报道都以“XXX文档的XX项”开头。有些元数据会在整个过程中重复出现,我稍后会用它们进行标记。
我希望将这个25mb文件拆分成单独的.txt文件,每个文件包含一个新闻报道(即“DOCUMENTS”和“Copyright”之间的文本,用不同的名称(显然)保存每个文件。
我试图1)打开文件... 2)迭代文件中的行检查eof分隔符,如果不存在则将行写入列表3)将该列表写入单独的小文件。
我在使用计数器更改文件名时遇到很大问题,如何让Python从我离开的地方开始,“搜索”功能是否合适?
到目前为止,我一直在尝试这种方法,完全没有成功:
myfile = open ("myfile.txt", 'r')
filenumber = 0
for line in myfile.readline():
filenumber += 1
w=0
while myfile.readline() != '\s+DOCUMENTS\s*\n'
### read my line into a list
mysmallfile()['w'] = [myfile.readline()]
w += 1
output = open('C:\\Users\\dunner7\\Documents\###how do I change the filename each iteration???', 'w')
output.writelines(mysmallfile)
###go back to start.
感谢您的时间和耐心。
RD
以下是文本文件的示例:
1 of 575 DOCUMENTS
The Washington Daybook
January 28, 2011
卫生及公共服务部(HHS);食品药品监督管理局(FDA) (F.R. Page 72832)召开了神经系统设备小组会议 医疗器械咨询委员会讨论并提出建议 可能对用于电惊厥的装置进行重新分类 治疗,1月27日至28日。
时间:早上8点。
地点:Hilton Washington DC North / Gaithersburg,Ballroom,620 Perry Parkway, 马里兰州盖瑟斯堡。
联系人:James Engles,800-741-8138 [注:使用代码:3014512513,当 要求提供信息。]
LOAD-DATE:2010年11月28日
语言:英语
TYPE:会议
Copyright 2011 Federal Information and News Dispatch, Inc.
2 of 575 DOCUMENTS
The Washington Daybook
January 27, 2011
卫生及公共服务部(HHS);食品药品监督管理局(FDA) (F.R. Page 72832)召开了神经系统设备小组会议 医疗器械咨询委员会讨论并提出建议 可能对用于电惊厥的装置进行重新分类 治疗,1月27日至28日。
时间:早上8点。
地点:Hilton Washington DC North / Gaithersburg,Ballroom,620 Perry Parkway, 马里兰州盖瑟斯堡。
联系人:James Engles,800-741-8138 [注:使用代码:3014512513,当 要求提供信息。]
LOAD-DATE:2010年11月28日
语言:英语
TYPE:会议
Copyright 2011 Federal Information and News Dispatch, Inc.
3 of 575 DOCUMENTS
FNS DAYBOOK
January 12, 2011 Wednesday
FUTURE EVENTS
活动:会议 - 健康与人类服务部门(HHS);食物和药物 行政(FDA)(F.R. PAGE 72832); 地点:希尔顿华盛顿特区北/盖瑟斯堡,宴会厅,620 Perry Parkway, 马里兰州盖瑟斯堡 - 2011年1月27日上午8:00
部分:联邦机构和部门 - 期货
长度:72字
主题:卫生及公共服务部(HHS);食品和药品 美国食品和药物管理局(FDA)(F.R.,第72832页)召开神经病学会议 医疗器械咨询委员会的设备小组讨论和制作 关于可能对设备进行重新分类的建议 用于电惊厥治疗,1月27日至28日。
联系人:James Engles,800-741-8138 [注:使用代码:3014512513,当 要求提供信息。]
LOAD-DATE:2011年1月10日
语言:英语
PUBLICATION-TYPE:活动时间表
Copyright 2011 Federal News Service
All Rights Reserved
答案 0 :(得分:1)
类似的东西:
filenumber = 0
outfile = None
with open('source_file.txt') as f:
for line in f:
if line.strip() == 'DOCUMENTS':
filenumber += 1
outfile = open('result%03d.txt' % filenumber, 'w')
elif line.strip().startswith('Copyright') and outfile:
outfile.close()
outfile = None
elif outfile:
outfile.write(line)
if outfile:
outfile.close()
我不得不猜测很多东西,因为我不太清楚文件的样子。如果您还有其他问题,请发布文件。
答案 1 :(得分:1)
一路上有几个问题:
myfile.readline()
- 当您想知道当前内容时,只需使用line
线myfile.readline() != 'string'
位总是会失败,这实际上不是正则表达式匹配。mysmallfile()['w']
看起来过于聪明(如果你使用mysmallfile()
函数返回一个用'w'索引的数组或字典来检索L值(!))或者像你一样离开这里的路线:))nosklo的建议有很多清理,我希望我的帖子可以帮助你理解他是如何得到他的。 :)