如何将“文件”类型的文件批量转换为“文本”类型的文件

时间:2019-08-13 13:51:18

标签: python

我有很多“文件”类型的文件。我想将它们转换为“文本”文件。

文件截图如下:

我想将这些文件转换为“文本”文件。我的代码如下:

    os.chdir('FolderName/')
    extension = 'txt'
    raw_filenames = [i for i in glob.glob('*')]   ### len(all_filenames1)
    text_filenames = ['%s'%(i).format(extension) for i in raw_filenames]
    print(len(text_filenames))
    print(type(raw_filenames[0]))
    print(type(text_filenames[0]))

输出:

    108
    <class 'str'>
    <class 'str'>

以上代码正在成功运行,但未将文件转换为.txt格式。 我正在尝试做两件事:

  1. 如何将这些文件转换为txt格式和
  2. 将具有相同名称的文件保存回同一文件夹吗?

2 个答案:

答案 0 :(得分:1)

我认为重命名是可行的。检查以下代码

import os
import glob

os.chdir('FolderName/')
extension = 'txt'
raw_filenames = [i for i in glob.glob('*')]   ### len(all_filenames1)
text_filenames = ['%s'%(i).format(extension) for i in raw_filenames]
print(len(text_filenames))
print(type(raw_filenames[0]))
print(type(text_filenames[0]))

for in, out in zip(raw_filename, text_filenames)
    os.rename(in, out)

答案 1 :(得分:0)

下面是一个使用pathlibos.rename组合递归重命名文件的小例子:

from pathlib import Path
import os
import sys

basedir = Path("FolderName").resolve(strict=True)
print(f"Renaming files in {basedir}")

prefix = "\\\\?\\" if sys.platform == "win32" else ""

for src in basedir.glob("**/*"):
    if src.is_dir():
        continue

    dst = src.with_suffix('.txt')
    if not dst.exists():
        try:
            os.rename(f"{prefix}{src}", f"{prefix}{dst}")
            print(f"Renamed {src}")
        except Exception as e:
            print(f"Error renaming: {e}")

在Windows上,如果dst存在,则始终引发FileExistsError,这就是为什么您应该检查dst是否已经存在的原因。另外,由于某些路径的os.rename太长可能会引发[WinError 3]异常,因此可能会发生,这就是为什么使用前缀“ \?\”的原因。

有关[WinError 3]的更多信息,您可以在https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#maximum-path-length-limitation此处查看文档