简体   繁体   English

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

[英]How to batch convert “File” type files to “text” type files

I have many "File" type files.我有很多“文件”类型的文件。 I want to convert them into "Text" files.我想将它们转换为“文本”文件。

Screenshot of files is given below:文件截图如下:

I want to convert these files into "Text" files.我想将这些文件转换为“文本”文件。 My code is given below:我的代码如下:

    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]))

Output:输出:

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

Above code is running successfully but not converting the files to .txt format.上面的代码运行成功,但没有将文件转换为.txt格式。 I am trying to do two things:我正在尝试做两件事:

  1. How to convert these file into txt format and如何将这些文件转换成txt格式和
  2. save them with same name back to same folder?将它们以相同的名称保存回同一个文件夹?

I think renaming would work.我认为重命名会起作用。 Check the following code检查以下代码

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)

Here's a little example to rename recursively files using pathlib and os.rename combo:这是一个使用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}")

On Windows, if dst exists a FileExistsError is always raised, that's why you should check if dst already exists.在 Windows 上,如果 dst 存在,则始终会引发 FileExistsError,这就是您应该检查 dst 是否已存在的原因。 Also, it may happen that because some paths being too long os.rename could raise a [WinError 3] exception, that's why using the prefix "\\?\\".此外,可能会发生这样的情况,因为某些路径太长 os.rename 可能会引发[WinError 3]异常,这就是使用前缀“\\?\\”的原因。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM