Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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将所有文本文件及其包含在所有.zip文件中的内容合并到一个文本文件中_Python_File Io_Readfile - Fatal编程技术网

使用Python将所有文本文件及其包含在所有.zip文件中的内容合并到一个文本文件中

使用Python将所有文本文件及其包含在所有.zip文件中的内容合并到一个文本文件中,python,file-io,readfile,Python,File Io,Readfile,我正试图编写一个程序,将读取文件夹中的所有文件,并将其所有内容输出到一个文件中。这些文件以.gz扩展名压缩。我设法读取了一个文件,但不是全部内容,也不是其余的文件。这是我的密码: import glob, gzip, re import pickle filed = open('Logs.txt', 'w') logfilenames = glob.glob('*.gz') logformat = re.compile(r'^\S+ \S+ \S+ \[([\w:/]+\s[+\-

我正试图编写一个程序,将读取文件夹中的所有文件,并将其所有内容输出到一个文件中。这些文件以.gz扩展名压缩。我设法读取了一个文件,但不是全部内容,也不是其余的文件。这是我的密码:

import glob, gzip, re
import pickle

filed = open('Logs.txt', 'w')


logfilenames = glob.glob('*.gz')




logformat = re.compile(r'^\S+ \S+ \S+ \[([\w:/]+\s[+\-]\d{4})\] "(\S+) (\S+) .*" (\d+) (\d+) "([^"]*)" "[^"]*"')
with gzip.GzipFile(logfilenames[0],'r') as f:
    for i in glob.glob('*.gz'):
        txtline = f.readline()
        parsedline = logformat.match(txtline)
        print "time={t} size={s} url={u}".format(t=parsedline.group(1), s=parsedline.group(5), u=parsedline.group(3))

        pickle.dump(["time={t} size={s} url={u}".format(t=parsedline.group(1), s=parsedline.group(5), u=parsedline.group(3))],filed)

filed.close()
另存为xD.sh

mkdir dir
mv $file dir
cd dir
tar -zxvf $file
for file in `ls -w 1 | grep -v ".gz"`; do
cat $file >> joint-file
done
mv joint-file ../
rm -rf dir
然后使用python中的

import os
cmd = './xd.sh'
os.system(cmd)
=)

试试这个(不要碰正则表达式):


OP想要的显然不仅仅是
cat
。看看他的正则表达式。我的答案是50%的笑话。解压后,您仍然可以使用应用一些正则表达式,只需使用您最喜欢的AWK、sed等组合。感谢@eumiro,它读取文件夹中的所有文件。唯一的问题是,现在它只从每个文件中读取一行,运行一段时间(读取文件)然后中途崩溃并给我这个错误:AttributeError:“NoneType”对象没有属性“group”@AdamAdamou-请查看我的更新版本,检查是否存在解析行
,这将修复您的
AttributeError
s。这意味着某些行与您的regexp不匹配。已解决,谢谢。非常感谢!
import glob, gzip, re
import cPickle

logformat = re.compile(r'^\S+ \S+ \S+ \[([\w:/]+\s[+\-]\d{4})\] "(\S+) (\S+) .*" (\d+) (\d+) "([^"]*)" "[^"]*"')

with open('Logs.txt', 'w') as f_out:
    for i in glob.glob('*.gz'):
        with gzip.GzipFile(i,'r') as f_in:
            for txtline in f_in:
                parsedline = logformat.match(txtline)
                if parsedline:
                    f_out.write("time={t} size={s} url={u}".format(t=parsedline.group(1), s=parsedline.group(5), u=parsedline.group(3)))