我是python的新手。我从SQL Server读取数据,然后将数据写入csv文件。表行包含数字,字符串和日期时间值。我尝试了不同的方法来编写数据。例如,
#method 1
import pandas as pd
df = pd.DataFrame(table, columns=["colummn"])
df.to_csv('list.csv', index=False)*
#method 2
import csv
fl = open('OnlineplayDatabase.csv', 'w')
writer = csv.writer(fl)
for row in table:
writer.writerow(row)
fl.close()
这两种方法通常都有效。但是当某些行包含中文字符时(参见下面的示例),我收到了编码错误。错误消息显示:
codecs.charmap_encode(input,self.errors,encoding_table)[0]
#Error Code
UnicodeEncodeError: 'charmap' codec can't encode character '\u5347' in position 68: character maps to <undefined>
我尝试使用utf-8对行中的字段进行编码。但有些领域是数字。
非常感谢您的帮助!
('120.239.9.116 ',
'gyandroid ',
4,
9,
'Dalvik/1.6.0(Linux;U;Android4.4.2;升级版Build/KVT49L) datetime.datetime(2016, 6, 11, 20, 54, 19),
datetime.datetime(2016, 6, 11, 20, 56, 53),
11521.0)
答案 0 :(得分:0)
再次查看错误。这种情况正在发生,因为数据框中的某些地方有以\u
开头的单词。你需要摆脱它。看看这是否有效。使用下面的remove_u
功能删除\u
。
def remove_u(word):
word_u = (word.encode('unicode-escape')).decode("utf-8", "strict")
if r'\u' in word_u:
# print(True)
return word_u.split('\\u')[1]
return word
df.loc[:, 'colummn'] = df['colummn'].apply(func = remove_u)
更新数据框后,请尝试重新编写。
修改强>
我假设你的专栏是由单个词组成的。如果您的列中包含字符串,请使用remove_u
def remove_u(input_string):
words = input_string.split()
words_u = [(word.encode('unicode-escape')).decode("utf-8", "strict") for word in words]
words_u = [word_u.split('\\u')[1] if r'\u' in word_u else word_u for word_u in words_u]
# print(words_u)
return ' '.join(words_u)
答案 1 :(得分:0)
尝试使用方法2:
#method 2
import csv
fl = open('OnlineplayDatabase.csv', 'w', encoding='utf8') #set the encoding to utf8
writer = csv.writer(fl)
for row in table:
writer.writerow(row)
fl.close()