python - 类型错误:+ 不支持的操作数类型:“nt.DirEntry”和“str”
问题描述
我需要将在 3.7.1 版本上编写的 Python 脚本降级到 3.6 版本,我正在努力让它工作。
这里的脚本:
#!/usr/bin/env python3
import fileinput
import os
def replace_function(entries):
with fileinput.FileInput(entries, inplace=True) as file:
for line in file:
line = line.replace('OLD', 'NEW')
print(line, end='')
def retrieve_files_function(folder):
return os.scandir("work\\" + folder)
replace_function(retrieve_files_function('function'))
replace_function(retrieve_files_function('package'))
这里是堆栈跟踪:
Traceback (most recent call last):
File "C:/Users/me/PycharmProjects/replacer/replaces", line 17, in <module>
replace_function(retrieve_files_function('function'))
File "C:/Users/me/PycharmProjects/replacer/replaces", line 8, in replace_function
for line in file:
File "C:\Users\me\AppData\Local\Programs\Python\Python36\lib\fileinput.py", line 250, in __next__
line = self._readline()
File "C:\Users\me\AppData\Local\Programs\Python\Python36\lib\fileinput.py", line 331, in _readline
self._filename + (self._backup or ".bak"))
TypeError: unsupported operand type(s) for +: 'nt.DirEntry' and 'str'
我想这将是几个解决方法中的第一个。谢谢!
解决方案
您的函数retrieve_files_function
正在返回一个os.DirEntry
对象列表,但看起来您希望它返回一个str
. 更清楚地说,当您调用 时os.scandir()
,它不仅返回文件名,还返回一个包含有关文件的附加信息的对象。相反,如果您调用os.listdir()
,它将只返回文件名作为字符串,然后我认为您的函数应该可以工作。
os.listdir
关于、os.scandir
和的文档os.DirEntry
都可以在这里找到:
https ://docs.python.org/3.7/library/os.html
的代码retrieve_files_function
如下所示:
def retrieve_files_function(folder):
return os.listdir(os.path.join("work\\", folder))
推荐阅读
- android - 错误:电子邮件地址格式错误 - React-native - Firebase
- c++ - 如何将类的非静态方法传递给类的数据成员的构造函数
- php - 配置粘贴在共享主机上的 laravel 应用程序中
- android-studio - 如何在 if 语句中将对象与用户输入进行比较
- excel - 仅使用一个单元格公式计算一行中的重复项(也没有条件格式)
- python - 如何在python中加速numpy数组的乘积
- xcode - 如何使用两个不同的 Info.plist?
- python - 我想使用 python django 做用户查找器
- python-3.x - 为什么我在使用 Python3 的字典中得到这种无效的语法?
- python - 用烧瓶和html上传jpg