【问题标题】:moving files from an unknown folder to other将文件从未知文件夹移动到其他文件夹
【发布时间】:2018-04-06 19:49:39
【问题描述】:

我正在提取里面有文件夹的 .tar.gz 文件(带有许多扩展名的文件)。我想将文件夹的所有 .txt 文件移动到另一个文件夹,但我不知道文件夹的名称。

.txt 文件位置 ---> my_path/extracted/?unknown_name_folder?/file.txt

我想做--->my_path/extracted/file.txt

我的代码:

os.mkdir('extracted')
t = tarfile.open('xxx.tar.gz', 'r')
for member in t.getmembers():
      if ".txt" in member.name:
            t.extract(member, 'extracted')
      ###

【问题讨论】:

  • @Noxeus 我想移动所有以 '.txt' 结尾的文件并将其移动到提取的文件夹中,
  • 如果你运行你的代码,会发生什么?我正在查看您的代码,但不知道为什么它不起作用。
  • @Noxeus 例如,在 'xxx.tar.gz' 里面有一个唯一的文件夹('folder'),在文件夹 'folder' 里面有像:image.jpg、text.txt、 text2.txt... 如果我运行代码,我会得到 my_path/extracted/folder/,并且在里面:text.txt,text2.txt
  • 你试过t.extract(member, os.path.join(os.getcwd(), 'extracted')) 吗?我只是在这里猜测。

标签: python python-3.x python-2.7


【解决方案1】:

我会先尝试解压 tar 文件 (See here)

import tarfile
tar = tarfile.open("xxx.tar.gz")
tar.extractall()
tar.close()

然后使用os.walk()方法(See here

import os
for root, dirs, files in os.walk('.\\xxx\\'):
    txt_files = [path for path in files if path[:-4] == '.txt']

或者按照@alper 在下面的 cmets 中的建议,使用 glob 包收集 txt 文件:

txt_files = glob.glob('./**/*.txt', recursive=True)

这是未经测试的,但应该让你非常接近

一旦你得到文本文件列表,显然移动它们

new_path = ".\\extracted\\"
for path in txt_files:
    name = path[path.rfind('\\'):]
    os.rename(path, new_path + name)

【讨论】:

  • 您也可以glob.glob('./**/*.txt', recursive=True) 获取与该模式匹配的文件的所有路径。
  • 这很酷。我知道 glob 包,但从没想过递归使用它
猜你喜欢
  • 2022-01-09
  • 2022-12-10
  • 1970-01-01
  • 2021-08-02
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多