python - Python TypeError:预期的 str、字节或 os.PathLike 对象,而不是 _io.TextIOWrapper
问题描述
我正在尝试将管道分隔的文本文件转换为 CSV 文件,然后遍历并打印 CSV 文件。这是我的代码:
with open("...somefile.txt", "r") as text_file:
text_reader = csv.reader(text_file, delimiter='|')
with open("...somefile.csv", 'w') as csv_file:
csv_writer = csv.writer(csv_file, delimiter=',')
csv_writer.writerows(text_reader)
with open (csv_file, 'r') as f:
reader = csv.reader (f, delimiter=',')
for row in reader:
print(row)
但是,我收到此错误消息:
----> 9 with open (csv_file, 'r') as f:
10 reader = csv.reader (f, delimiter=',')
11 for row in reader:
TypeError: expected str, bytes or os.PathLike object, not _io.TextIOWrapper
谁能解释这意味着什么?
另外,如果我要把它变成一个函数,我怎么能把一个文件名作为输入,然后改变文件来添加一个 .csv 扩展名 wen 转换为一个 csv 文件?
谢谢
解决方案
您正在传递open
一个已经打开的文件,而不是您创建的文件的路径。
代替:
with open (csv_file, 'r') as f:
和
with open ("...somefile.csv", 'r') as f:
要更改函数中的扩展名:
import pathlib
def txt_to_csv(fname):
new_name = f'{Path(fname).stem}.csv'
with open(fname, "r") as text_file:
text_reader = csv.reader(text_file, delimiter='|')
with open(new_name, 'w') as csv_file:
csv_writer = csv.writer(csv_file, delimiter=',')
csv_writer.writerows(text_reader)
with open (new_name, 'r') as f:
reader = csv.reader (f, delimiter=',')
for row in reader:
print(row)
推荐阅读
- javascript - MDL:以编程方式在 javascript 中设置组件的值/状态
- java - Tomcat在jsp中生成随机空间
- xamarin - Xamarin MacOS CGDisplayStream 绑定
- python - 检查数据框中的行是否存在于另一个数据框中并从两者中删除
- python - Pandas:使用 3 个周期的窗口进行计算
- javascript - 完整日历 V4 - 单击事件,如何更改日期的颜色
- lambda - 为什么我会得到
. 在 0x000001EFDE355310> - apache - 如何使用apache mod_rewrite从请求的URL中的文件名中删除md5而不使用md5?
- node.js - 在 Windows 上启动 Nodejs 应用程序在启动时使用 taskscheduler 无法正常工作
- jestjs - TypeError:开玩笑:转换必须导出某些东西