【问题标题】:Python TypeError: expected str, bytes or os.PathLike object, not _io.TextIOWrapperPython TypeError:预期的 str、字节或 os.PathLike 对象,而不是 _io.TextIOWrapper
【发布时间】:2020-06-27 12:57:52
【问题描述】:

我正在尝试将管道分隔的文本文件转换为 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 文件?

谢谢

【问题讨论】:

    标签: python csv typeerror


    【解决方案1】:

    您传递的是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)
    

    【讨论】:

    • 谢谢 - 如果这是一个以文件为输入的函数,并且我不得不使用变量名而不是原始文件路径,那么解决方案是什么?
    • 已编辑以包含第二个问题的答案
    【解决方案2】:

    我不是csv 库的专家。但是,关于您的其他问题:

    另外,如果我要把它变成一个函数,我怎么能把一个文件名作为输入,然后改变文件来添加一个 .csv 扩展名 wen 转换为一个 csv 文件?

    解决方案:

    def converter(input_file_name):
      with open(input_file_name, 'r') as txt_file:
        output_file_name = input_file_name.replace('.txt', '.csv')
        with open(output_file_name, 'w') as csv_file:
          # your logic resides here.
    

    【讨论】:

      猜你喜欢
      • 2019-04-11
      • 2020-05-29
      • 1970-01-01
      • 2021-03-05
      • 2017-10-23
      • 2020-07-12
      • 2021-10-21
      • 1970-01-01
      相关资源
      最近更新 更多