有没有办法改变文件的编码?例如UTF-8到ISO 8859-1?
设置示例Sublime文本: __CODE__
我正在编写一个脚本,尝试在Python 2.6中将字节编码为许多不同的编码.有没有办法获得可以迭代的可用编码列表?
我试图这样做的原因是因为用户有一些未正确编码的文本.有趣的人物.我知道unicode角色搞砸了.我希望能够给他们一个答案,例如"你的文本编辑器将该字符串解释为X编码,而不是Y编码".我以为我会尝试使用一种编码对该字符进行编码,然后使用另一种编码再次对其进行解码,看看我们是否得到相同的字符序列.
即是这样的:
for encoding1, encoding2 in itertools.permutation(encodinglist(), 2):
try:
unicode_string = my_unicode_character.encode(encoding1).decode(encoding2)
except:
pass
Run Code Online (Sandbox Code Playgroud) 我正在尝试将CSV文件读入Pandas中的Dataframe.当我尝试这样做时,我收到以下错误:
UnicodeDecodeError:'utf-8'编解码器无法解码位置55的字节0x96:无效的起始字节
这来自代码:
import pandas as pd
location = r"C:\Users\khtad\Documents\test.csv"
df = pd.read_csv(location, header=0, quotechar='"')
Run Code Online (Sandbox Code Playgroud)
这是在Windows 7企业Service Pack 1计算机上,它似乎适用于我创建的每个CSV文件.在这种特定情况下,位置55的二进制位是00101001,位置54是01110011,如果这很重要的话.
使用文本编辑器将文件保存为UTF-8似乎也没有帮助.同样,添加参数"encoding ='utf-8'也不起作用 - 它返回相同的错误.
导致此错误的最可能原因是什么?除了暂时放弃DataFrame构造并使用csv模块逐行读取CSV之外,还有其他解决方法吗?
我正在使用Python 2.7.12.使用此代码片段,我将保存一个utf-8 csv文件.我在文件的开头写了BOM.
import codecs
import csv
outputFile = open("test.csv", "wb")
outputFile.write(codecs.BOM_UTF8)
fieldnames = ["a", "b"]
writer = csv.DictWriter(outputFile, fieldnames, delimiter=";")
writer.writeheader()
row = dict([])
for i in range(10):
row["a"] = str(i).encode("utf-8")
row["b"] = str(i*2).encode("utf-8")
writer.writerow(row)
outputFile.close()
Run Code Online (Sandbox Code Playgroud)
我想加载该csv文件:
import codecs
import csv
inputFile = open("test.csv", "rb")
reader = csv.DictReader(inputFile, delimiter=";")
for row in reader:
print row["a"]
inputFile.close()
Run Code Online (Sandbox Code Playgroud)
上面的代码将失败:KeyError: 'a'
如果我打印行键,这就是它们的样子:[u'\ufeffa', u'b'].BOM已嵌入到密钥中a.我究竟做错了什么?
我正在尝试的是读取一个csv来创建一个数据帧---在列中进行更改---再次更新/反映更改的值到相同的csv(to_csv) - 再次尝试读取该csv以生成另一个数据帧...我收到一个错误
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 7: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)
我的代码是
import pandas as pd
df = pd.read_csv("D:\ss.csv")
df.columns #o/p is Index(['CUSTOMER_MAILID', 'False', 'True'], dtype='object')
df['True'] = df['True'] + 2 #making changes to one column of type float
df.to_csv("D:\ss.csv") #updating that .csv
df1 = pd.read_csv("D:\ss.csv") #again trying to read that csv
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 7: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)
所以请建议我如何避免错误并能够再次将该csv读取到数据帧.
我知道某处我在读取和写入csv时缺少"encode = some codec type"或"decode = some type".
但我不知道到底应该改变什么.所以需要帮助.
我试图打开一个xlsx文件,只打印它的内容.我一直遇到这个错误:
import xlrd
book = xlrd.open_workbook("file.xlsx")
print "The number of worksheets is", book.nsheets
print "Worksheet name(s):", book.sheet_names()
print
sh = book.sheet_by_index(0)
print sh.name, sh.nrows, sh.ncols
print
print "Cell D30 is", sh.cell_value(rowx=29, colx=3)
print
for rx in range(5):
print sh.row(rx)
print
Run Code Online (Sandbox Code Playgroud)
它打印出这个错误
raise XLRDError('Unsupported format, or corrupt file: ' + msg)
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '\xff\xfeT\x00i\x00m\x00'
Run Code Online (Sandbox Code Playgroud)
谢谢
我尝试读取 csv 文件
\n\n df = pd.read_csv("raccoons.csv", delimiter=":")\n df.head()\nRun Code Online (Sandbox Code Playgroud)\n\n它又回到了我身边
\n\n \xef\xbf\xbd\xef\xbf\xbdc Unnamed: 1 Unnamed: 2\n NaN NaN NaN NaN\n NaN NaN NaN NaN\n NaN NaN NaN NaN\n NaN NaN NaN NaN\n NaN NaN NaN NaN\nRun Code Online (Sandbox Code Playgroud)\n\n文件内部
\n\ncorrds:time:raccoons_bought\n55.771393 37.567392:4423O3138:2\n55.705458 37.550926:442365718:0\n55.83028 37.404815:442244596:0\n55.799092 37.452157:442327511:148.00001\n55.749785 37.763962:442248573:1\nRun Code Online (Sandbox Code Playgroud)\n 我正在尝试解析 CSV 文件(来自外部数据源),其中其中一列使用不一致的字符编码。我不想尝试让数据提供者使用一致的编码,而是只想将该列读取为二进制数据。然而,pandas.read_csv似乎在解析之前将整个文件解码为字符串,因此这给了我错误(UnicodeDecodeError)。这是一个玩具示例(python 3):
>>> from io import BytesIO\n>>> import pandas as pd\n>>> csv = b\'Encoding,Data\\nascii,abc\\nwindows-1252,\\xae\\nutf-8,\\xe2\\x80\\x9c1\\xe2\\x80\\x9d\\n\'\n>>> pd.read_csv(BytesIO(csv))\nTraceback (most recent call last):\n File "pandas/_libs/parsers.pyx", line 1130, in pandas._libs.parsers.TextReader._convert_tokens\n File "pandas/_libs/parsers.pyx", line 1254, in pandas._libs.parsers.TextReader._convert_with_dtype\n File "pandas/_libs/parsers.pyx", line 1269, in pandas._libs.parsers.TextReader._string_convert\n File "pandas/_libs/parsers.pyx", line 1459, in pandas._libs.parsers._string_box_utf8\nUnicodeDecodeError: \'utf-8\' codec can\'t decode byte 0xae in position 0: invalid start byte\nRun Code Online (Sandbox Code Playgroud)\n\n我想要一个与此等效的结果:
\n\n>>> df = pd.DataFrame({\'Encoding\': [\'ascii\',\'windows-1252\',\'utf-8\'],\n... \'Data\': [b\'abc\',b\'\\xae\',b\'\\xe2\\x80\\x9c1\\xe2\\x80\\x9d\']})\n>>> df\n Encoding Data\n0 ascii b\'abc\'\n1 windows-1252 b\'\\xae\'\n2 utf-8 b\'\\xe2\\x80\\x9c1\\xe2\\x80\\x9d\'\nRun Code Online (Sandbox Code Playgroud)\n\n … 用 pandas 打开德语 csv 文件的最佳方法是什么?
\n我有一个包含以下列的德语 csv 文件:
\n我的预期输出是:
\n Umlaute Zahlen\nDatum \n2020-01-01 R\xc3\xbcdiger 1000000.11\n2020-01-02 G\xc3\xbcnther 12.34\n2020-01-03 J\xc3\xbcrgen 567.89\nRun Code Online (Sandbox Code Playgroud)\n下面提供了示例数据(参见文件)。
\n Umlaute Zahlen\nDatum \n2020-01-01 R\xc3\xbcdiger 1000000.11\n2020-01-02 G\xc3\xbcnther 12.34\n2020-01-03 J\xc3\xbcrgen 567.89\nRun Code Online (Sandbox Code Playgroud)\n这会抛出一个UnicodeDecodeError:
UnicodeDecodeError: \'utf-8\' codec can\'t decode byte 0xfc in position 12: invalid start byte\nRun Code Online (Sandbox Code Playgroud)\n df = pd.read_csv(\'german_csv_test.csv\', sep=\';\', encoding=\'latin1\')\nRun Code Online (Sandbox Code Playgroud)\n这不会引发错误,但它与我想要的输出相去甚远:
\n