我运行了一个 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 statement
似乎是发生错误的地方,因为这是发生转换的地方。我跑了df
:
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
我认为我夸大了这个问题。这就是解决问题的方法。我只是在编码中添加了
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