首页 > 解决方案 > 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 文件?

谢谢

标签: pythoncsvtypeerror

解决方案


您正在传递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)

推荐阅读