Python文件命名问题
我正在尝试迭代多个 .rtf 文件,并针对每个文件:读取文件,执行一些操作,然后将新文件作为纯文本文件写入子目录,其名称与原始文件相同,但扩展名为 .rtf。 txt 扩展名。我遇到的问题是文件命名。
如果文件名为 foo.rtf,我希望子目录中的新文件为 foo.txt。这是我的代码:
import glob
import os
import numpy as np
dir_path = '/Users/me/Desktop/test/'
file_suffix = '*.rtf'
output_dir = os.mkdir('sub_dir')
for item in glob.iglob(dir_path + file_suffix):
with open(item, "r") as infile:
reader = infile.readlines()
matrix = []
for row in reader:
row = str(row)
row = row.split()
row = [int(value) for value in row]
matrix.append(row)
np_matrix = np.array(matrix)
inv_matrix = np.transpose(np_matrix)
new_file_name = item.replace('*.rtf', '*.txt') # i think this line is the problem?
os.chdir(output_dir)
with open(new_file_name, mode="w") as outfile:
outfile.write(inv_matrix)
当我运行此代码时,出现类型错误:
类型错误:强制转换为 Unicode:需要字符串或缓冲区,未找到任何类型
如何修复代码以将新文件写入子目录并将文件扩展名从 .rtf 更改为 .txt?感谢您的帮助。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
代替
item.replace
,查看os.path
模块中的一些函数 (http://docs.python.org/library/os.path.html)。它们是为分割和重新组合文件名的各个部分而设计的。例如,os.path.splitext 会将文件名拆分为文件路径和文件扩展名。假设您有一个文件
/tmp/foo.rtf
并且您想将其移动到/tmp/foo.txt
:或者如果您想要单行版本:
Instead of
item.replace
, check out some of the functions in theos.path
module (http://docs.python.org/library/os.path.html). They're made for splitting up and recombining parts of filenames. For instance,os.path.splitext
will split a filename into a file path and a file extension.Let's say you have a file
/tmp/foo.rtf
and you want to move it to/tmp/foo.txt
:Or if you want the one line version:
我从未使用过 glob,但这里有一种不使用模块的替代方法:
您可以轻松地使用删除后缀
,然后添加新后缀:
为什么不使用函数?
I've never used glob, but here's an alternative way without using a module:
You can easily strip the suffix using
and then add the new suffix:
Why not using a function ?
glob.iglob()
生成不带字符“*”的路径名。因此你的行应该是:
考虑使用更清晰的名称(保留“文件名”作为文件名,并使用“路径”作为文件的完整路径;使用“path_original”而不是“item”),os.extsep(“. ' 在 Windows 中)和 os.path.splitext():
现在是最好的提示:
numpy 可能可以直接读取你的文件:(
另请参阅此处)
为了更好地了解
TypeError
的来源,请将代码包装在以下 try/ except 块中:glob.iglob()
yields pathnames, without the character '*'.therefore your line should be:
consider working with clearer names (reserve 'filename' for a file name and use 'path' for a complete path to a file; use 'path_original' instead of 'item'), os.extsep ('.' in Windows) and os.path.splitext():
now the best hint of all:
numpy can probably read your file directly:
(see also here)
To better understand where your
TypeError
comes from, wrap your code in the following try/except block: