Python:如何分割文件?
我有一个txt文件,它是linux系统中etc目录的ls-R。示例文件: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
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:你为什么这么认为?我认为它很容易阅读:)