首页 新闻 会员 周边

Python把一个大文件分割成若干个小文件

0
悬赏园豆:50 [待解决问题]

有个原始文件格式如下,要实现通过python脚本把以下内容分割成小文件并按照指定的格式重命名。

原始文件为txt格式,内容如下:

this is file a

4567890

################

this is file b

ertyui56789

tyui

################

this is file c

ertyuiop56789ukl‘’hj

 

输出内容:

1,包含3个txt文件,名字分别为this is file a/b/c

2,每个txt文件里面包含对应的内容,比如 this is file a里面包含:

this is file a

4567890

Robin_Wang的主页 Robin_Wang | 初学一级 | 园豆:20
提问于:2020-03-16 21:38
< >
分享
所有回答(2)
0
import re
p = re.compile('################',re.S)
f = open(r"D:\pythonProject\m.txt","r",encoding='UTF-8').read()
paralist = p.split(f)
total_num = len(paralist)
for paraindex in range(total_num):
     filewrite=open( r"D:\pythonProject\\" + str(paraindex) + ".txt",'w')
     filewrite.writelines(paralist[paraindex])
filewrite.close()
风行天下12 | 园豆:3867 (老鸟四级) | 2020-03-16 22:16

报错:

raise source.error("multiple repeat",
re.error: multiple repeat at position 3

支持(0) 反对(0) Robin_Wang | 园豆:20 (初学一级) | 2020-03-17 08:16

@Robin_Wang: 不知道你是哪个版本,py3 正常执行,不会报错

支持(0) 反对(0) 风行天下12 | 园豆:3867 (老鸟四级) | 2020-03-17 09:24

@风行天下12: 我的是3.8,刚试了一下有2个问题:

1,简单的几行不会报错,但是文件名不是每个段落的第一行,而是数字0,1,2,3.。。。

2,我实际的文件非常大(几百兆),里面这样的段落也非常多(几十个到一百多个),运行的时候就会报multiple repeat的错误

支持(0) 反对(0) Robin_Wang | 园豆:20 (初学一级) | 2020-03-17 10:20
0

可以边读便写
原始文件是file_txt
f=open(file_txt,'r')
tmp=[]
newfilelines=[]
for line in f:
if line.find("#")!=-1:
newfilelines.append(tmp)
tmp=[]
contiue
if line.find("This is file")!=-1:
tmp.append(line)
tmp.insert(0,line)#记录文件名
f.close()
for file in newfilelines:
filename=file[0]
with open(filename,'w') as f:
f.writelines(file[1:])

超级大懒虫vip | 园豆:393 (菜鸟二级) | 2020-03-16 22:21

报错:

  filename=file[0]
IndexError: list index out of range

支持(0) 反对(0) Robin_Wang | 园豆:20 (初学一级) | 2020-03-17 08:43

@Robin_Wang:

这个跑了一下,可以
f=open("file.txt",'r',encoding="utf-8")
tmp=[]
newfilelines=[]
for line in f:
if line.find("#")!=-1:
newfilelines.append(tmp)
tmp=[]
continue
if line.find("this is file")!=-1:
tmp.append(line)
tmp.insert(0,line.strip())#记录文件名 continue
tmp.append(line)
else:
newfilelines.append(tmp)
f.close()
for file in newfilelines:
filename=file[0]
with open(filename,'w') as f:
f.writelines(file[1:])

支持(0) 反对(0) 超级大懒虫vip | 园豆:393 (菜鸟二级) | 2020-03-17 21:36

@超级大懒虫vip: 

文件名的规则是文件内容的第一行内容,格式是不一样的,所以if line.find("this is file")!=-1:这种方式不可取。

支持(0) 反对(1) Robin_Wang | 园豆:20 (初学一级) | 2020-03-17 21:55

@Robin_Wang:
那你是要回答者盲猜么?
有什么识别flag,你替换一下不就行行了?

支持(0) 反对(1) 超级大懒虫vip | 园豆:393 (菜鸟二级) | 2020-03-17 21:57

@超级大懒虫vip: 

没有固定的关键字,唯一的规律就是内容的第一行有效字符,如果第一行是空白行就是第二行。

支持(0) 反对(0) Robin_Wang | 园豆:20 (初学一级) | 2020-03-17 22:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册