Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何分割文件?_Python - Fatal编程技术网

Python:如何分割文件?

Python:如何分割文件?,python,Python,我有一个txt文件,它是linux系统中etc目录的ls-R。示例文件: etc: ArchiveSEL xinetd.d etc/cmm: CMM_5085.bin cmm_sel storage.cfg etc/crontabs: root etc/pam.d: ftp rsh etc/rc.d: eth.set.sh rc.sysinit etc/rc.d/init.d: cmm functions userSc

我有一个txt文件,它是linux系统中etc目录的ls-R。示例文件:

etc:  
ArchiveSEL  
xinetd.d

etc/cmm:  
CMM_5085.bin  
cmm_sel  
storage.cfg  

etc/crontabs:  
root

etc/pam.d:  
ftp    
rsh  

etc/rc.d:  
eth.set.sh  
rc.sysinit  

etc/rc.d/init.d:  
cmm  
functions  
userScripts  

etc/security:  
access.conf  
console.apps  
time.conf

etc/security/console.apps:  
kbdrate

etc/ssh:  
ssh_host_dsa_key  
sshd_config  

etc/var:  
setUser  
snmpd.conf

etc/xinetd.d:  
irsh  
wu-ftpd
我想把它按子目录分成几个文件。示例文件如下:etc.txt、etcCmm.txt、etcCrontabs.txt、etcPamd.txt、…
有人能给我一个python代码吗? 请注意,子目录行以“:”结尾,但我只是不够聪明,无法编写代码。请举一些例子。
谢谢:)

使用类似“*:”的regexp
使用file.readline()。

使用循环。

使用类似“*:”的regexp
使用file.readline()。

使用循环。

如果Python不是必须的,那么您可以使用这一行程序

awk '/:$/{gsub(/:|\//,"");fn=$0}{print $0 > fn".txt"}' file

如果Python不是必须的,那么您可以使用这个一行程序

awk '/:$/{gsub(/:|\//,"");fn=$0}{print $0 > fn".txt"}' file

你需要一行一行地做。如果一个
行.endswith(“:”)
则您位于一个新的子目录中。从那时起,每一行都是子目录中的一个新条目,直到另一行以
结尾

根据我的理解,您只需要将一个文本文件拆分为几个名称模糊的文本文件

因此,您将看到一行是否以
结尾。然后打开一个新的文本文件,如
etcCmm.txt
,从该点开始,从源文本读取的每一行都写入
etcCmm.txt
。当您遇到另一行以
结尾时,请关闭以前打开的文件,创建一个新文件,然后继续


我留下一些事情让你自己去做,比如找出文本文件的名称,逐行读取文件等等。

你需要逐行去做。如果一个
行.endswith(“:”)
则您位于一个新的子目录中。从那时起,每一行都是子目录中的一个新条目,直到另一行以
结尾

根据我的理解,您只需要将一个文本文件拆分为几个名称模糊的文本文件

因此,您将看到一行是否以
结尾。然后打开一个新的文本文件,如
etcCmm.txt
,从该点开始,从源文本读取的每一行都写入
etcCmm.txt
。当您遇到另一行以
结尾时,请关闭以前打开的文件,创建一个新文件,然后继续


我给你留下一些事情让你自己做,比如找出文本文件的名称,逐行读取文件等等。

也许是这样的
re.M
生成一个可以匹配多行的多行正则表达式,最后一部分只是迭代匹配项并创建文件

import re

data = '<your input data as above>' # or open('data.txt').read()
results = map(lambda m: (m[0], m[1].strip().splitlines()),
    re.findall('^([^\n]+):\n((?:[^\n]+\n)*)\n', data, re.M))

for dirname, files in results:
    f = open(dirname.replace('/', '')+'.txt', 'w')
    for line in files:
        f.write(line + '\n')
    f.close()
重新导入
数据=''#或打开('data.txt')。读取()
结果=映射(λm:(m[0],m[1].strip().splitlines()),
re.findall('^([^\n]+):\n((?:[^\n]+\n)*)\n',数据,re.M))
对于dirname,结果中的文件:
f=打开(dirname.replace('/','')+'.txt',w')
对于行输入文件:
f、 写入(第+'\n'行)
f、 关闭()

也许是这样的
re.M
生成一个可以匹配多行的多行正则表达式,最后一部分只是迭代匹配项并创建文件

import re

data = '<your input data as above>' # or open('data.txt').read()
results = map(lambda m: (m[0], m[1].strip().splitlines()),
    re.findall('^([^\n]+):\n((?:[^\n]+\n)*)\n', data, re.M))

for dirname, files in results:
    f = open(dirname.replace('/', '')+'.txt', 'w')
    for line in files:
        f.write(line + '\n')
    f.close()
重新导入
数据=''#或打开('data.txt')。读取()
结果=映射(λm:(m[0],m[1].strip().splitlines()),
re.findall('^([^\n]+):\n((?:[^\n]+\n)*)\n',数据,re.M))
对于dirname,结果中的文件:
f=打开(dirname.replace('/','')+'.txt',w')
对于行输入文件:
f、 写入(第+'\n'行)
f、 关闭()

以下是我要做的:

将文件读入内存(
myfile=open(filename).Read()
应该这样做)

然后沿分隔符拆分文件:

import re
myregex = re.compile(r"^(.*):[ \t]*$", re.MULTILINE)
arr = myregex.split(myfile)[1:] # dropping everything before the first directory entry
然后将数组转换为dict,同时删除不需要的字符:

mydict = dict([(re.sub(r"\W+","",k), v.strip()) for (k,v) in zip(arr[::2], arr[1::2])])
然后编写文件:

for name,content in mydict.iteritems():
    output = open(name+".txt","w")
    output.write(content)
    output.close()

下面是我要做的:

将文件读入内存(
myfile=open(filename).Read()
应该这样做)

然后沿分隔符拆分文件:

import re
myregex = re.compile(r"^(.*):[ \t]*$", re.MULTILINE)
arr = myregex.split(myfile)[1:] # dropping everything before the first directory entry
然后将数组转换为dict,同时删除不需要的字符:

mydict = dict([(re.sub(r"\W+","",k), v.strip()) for (k,v) in zip(arr[::2], arr[1::2])])
然后编写文件:

for name,content in mydict.iteritems():
    output = open(name+".txt","w")
    output.write(content)
    output.close()

如果您对Python一无所知,那么最体面的做法就是通读Python并了解它正在发生的事情。请阅读Python文档,了解Python。说“只是不够聪明”只是个借口。嘿,伙计们,放松点。我只是加了一句谦虚的话。在我决定发布这个问题之前,我尝试了半天以上的时间来寻找一个例子或解决方案。如果你对Python一无所知,最体面的做法就是仔细阅读它,了解它正在发生的事情。请阅读Python文档,了解Python。说“只是不够聪明”只是个借口。嘿,伙计们,放松点。我只是加了一句谦虚的话。在我决定发布这个问题之前,我尝试了半天以上的时间来寻找一个例子或解决方案。希望下次能得到更多建设性的帮助。文件名以
结尾是合法的。最好检查一下
/
,但是他有
etc
,里面没有
/
。我想他可以检查一下双行分隔符。文件名以
结尾是合法的。最好检查一下
/
,但是他有
etc
,里面没有
/
。我想他可以检查一下双线breaks@Marius格德米纳斯:你为什么这么认为?我认为这很容易理解:)@Marius Gedminas:你为什么这么认为?我认为它很容易阅读:)