【问题标题】:I have a folder with many .tar.gz files. In python I want to go into each file unzip or compress and find text file that has string I want to extract?我有一个包含许多 .tar.gz 文件的文件夹。在python中,我想进入每个文件解压缩或压缩并找到包含我要提取的字符串的文本文件?
【发布时间】:2019-07-13 02:00:32
【问题描述】:

我有许多 gz.tar 压缩文件的主文件夹。所以我需要解压缩两次才能得到一个带有文本的数据文件,然后我在文本中提取某个字符串。我无法解压缩以获取带有文本的文件,然后移至下一个文件并执行相同操作。将结果保存在数据框中。

import os
import tarfile
for i in os.listdir(r'\user\project gz'):
 tar = (i, "r:gz")
 for m in tar.getmembers():
  f= tar.extractfile(member):
  if f is not None:
   content = f.read()
   text = re.findall(r"\name\s", content)
   df = pd.Dataframe(text)
   print(df)

【问题讨论】:

  • 试试内置模块tarfile ?
  • @james Liu 是的,我导入了 tarfile。但还是卡住了
  • 当我解压缩两次时,每个文件中有 50 个左右的文件。我只需要一个 .txt 文件来运行字符串搜索。

标签: python jupyter-notebook filereader tar gzip


【解决方案1】:

我猜你想在\user\project gz\*.tar.gz 中找出包含字符串\name\s 的文件?

解决办法是

import os
import re
import tarfile

import pandas as pd

row = []
value = []


for filename in os.listdir(r'\\user\\project gz'):
    if filename.endswith('.tar.gz'):
        tar = tarfile.open(r'\\user\\project gz' + filename)
        for text_file in tar.getmembers():
            f = tar.extractfile(text_file)
            if f is not None:
                content = f.read().decode()
                if re.findall(r"\\name\\s", content):
                    row.append(text_file.name)
                    value.append(content)
        tar.close()


df = pd.DataFrame(value, columns=['nametag'], index=row)
print(df)

【讨论】:

  • @steve 具体是哪个文件?
  • 所以一旦我进入这些 tar.gz 文件,我正在寻找一个文本文件。此文本文件具有名称标签。我尝试将文件名和名称标签复制到数据框.......................... file.tar -->> file.gz --->> file.txt.......这个文本文件里面是一个名称标签。我想将文件名和名称标签复制到数据框以进行提取。
  • UnicodeDecodeError: 'utf-8' codex can't decode byte 0xff in position 0: invalid start byte
  • 你可以试试 f.read().decode('utf-8', errors='ignore') 忽略错误
  • 但是更好的解决方法是传递正确的encoding=。如果无法查看文件中的字节,我们无法告诉您它们包含哪种编码。如果您自己想不通,也许可以在Unix & LinuxSuper User 上发布一个新问题。另见meta.stackoverflow.com/questions/379403/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多