遍历文件夹并将所有文本文件转换为 csv 文件 错误

Iterating through a folder and converting all text files to csv files Error

提问人:noobCoder 提问时间:10/17/2023 最后编辑:noobCoder 更新时间:10/17/2023 访问量:53

问:

我运行了一个 Powershell 代码,它输出了一堆文本文件。

文本文件如下所示:

这是我的aText.txt

    Clark Kent
    Dolly Parten
    Charlie Brown
    Gary Numan

它只是带有名称的文本文件,没有标题。我希望现在将它们转换为 csv 文件,所以我转向 Python 并编写了以下代码:

    import os
    import pandas as pd
    
    folder = '\path\text\'
    csvFolder = '\path\csv\'
    
    for filename in os.listdir(folder):
    
        if filename.endswith('.txt'):
            file_path = os.path.join(folder, filename)
            csvpath = os.path.join(csvFolder, filename)
            
            #if file is empty
            if os.stat(file_path).st_size == 0:
                df = pd.DataFrame()
    
            #for other files
            else:
                df = pd.read_csv(file_path, header=0, names=None)
    
            csv_path = os.path.splitext(csvpath)[0] + '.csv'
    
            df.to_csv(csv_path, index=False)
    
    
    print("Text files have been converted to csv")

当我运行它时,它给了我一个错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

我做了一些研究,但没有看到 Pandas 的任何内容,只有 csv 功能。有人在一些回应中包括了这一点:

    df = pd.read_csv(file_path, encoding='cp1252', header=0, names=None)

我试了一下,程序运行了,但是csv文件被奇怪的字符损坏了。 我在创建文本文件的测试文件夹上尝试了这个,它运行良好,输出也很好,但是使用从 Powershell 创建的文本文件,代码运行(没有错误消息),但输出不正确。

以下是转换后我在 csv 文件中看到的内容的示例:

    ¿ Ã Ÿâ

这似乎是发生错误的地方,因为这是发生转换的地方。我跑了:else statementdf

df = pd.read_csv(file_path, encoding='cp1252', header=0, names=None)
print("This is df: ", df)

下面是示例输出:

This is df:      ÿþA
0   NaN
1   NaN
2   NaN
3   NaN
4   NaN
5   NaN
python pandas csv 文本 文件转换

评论

1赞 John Gordon 10/17/2023
你让我们猜测错误在哪里。请更新问题以包含完整的错误回溯消息。
0赞 noobCoder 10/17/2023
约翰,我更新了我的问题。但我现在意识到如何解决这个问题。我的编码完全错误,因为它们没有以 Pandas 自动假设的默认 UTF-8 编码。
1赞 J_H 10/17/2023
@noobCoder,我可以回答我自己的问题吗?你打赌!stackoverflow.com/help/self-answer
0赞 John Gordon 10/17/2023
“打开文件时使用正确的编码”并不是一个非常有趣的解决方案。如果仅此而已,您最好删除该问题。

答:

1赞 noobCoder 10/17/2023 #1

我想我把这个问题搞砸了。我认为这是一个更大的问题,但是在等待响应时玩弄编码似乎可以解决这个问题。我只是在编码中添加了:utf-16

df = pd.read_csv(file_path, encoding='utf-16', header=0)
print("this is df: \n", df)

输出:

this is df:
Clark Kent
Dolly Parten
Charlie Brown
Gary Numan