我试图用Python读取一个CSV文件,代码如下:
with open("example.txt") as f:
c = csv.reader(f)
for row in c:
print row
Run Code Online (Sandbox Code Playgroud)
我example.txt只有以下内容:
Hello world!
对于UTF-8或ANSI编码文件,这给了我预期的输出:
> ["Hello world!"]
Run Code Online (Sandbox Code Playgroud)
但是,如果我将文件保存为带有BOM的UTF-8,我会得到以下输出:
> ["\xef\xbb\xbfHello world!"]
Run Code Online (Sandbox Code Playgroud)
由于我无法控制用户将用作输入的文件,因此我希望这也适用于BOM.我该如何解决这个问题?有什么我需要做的,以确保这也适用于其他编码?
我想将数据写入文件,其中CSV中的行应该看起来像这个列表(直接来自Python控制台):
row = ['\xef\xbb\xbft_11651497', 'http://kozbeszerzes.ceu.hu/entity/t/11651497.xml', "Szabolcs Mag '98 Kft.", 'ny\xc3\xadregyh\xc3\xa1za', 'ny\xc3\xadregyh\xc3\xa1za', '4400', 't\xc3\xbcnde utca 20.', 47.935175, 21.744975, u'Ny\xedregyh\xe1za', u'Borb\xe1nya', u'Szabolcs-Szatm\xe1r-Bereg', u'Ny\xedregyh\xe1zai', u'20', u'T\xfcnde utca', u'Magyarorsz\xe1g', u'4405']
Run Code Online (Sandbox Code Playgroud)
Py2k不做Unicode,但我有一个UnicodeWriter包装器:
import cStringIO, codecs
class UnicodeWriter:
"""
A CSV writer which will write rows to CSV file "f",
which is encoded in the given encoding.
"""
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
# Redirect output to a queue
self.queue = cStringIO.StringIO()
self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
self.stream = f
self.encoder = codecs.getincrementalencoder(encoding)()
def writerow(self, …Run Code Online (Sandbox Code Playgroud) 我想从网页上读取非ASCII JSON数据,在我的例子中是Perrsian.这是我在python-2.7中的代码:
jsonObject = json.loads(urllib2.urlopen("https://api.instagram.com/v1/users/"+userId+"/?access_token="+accessToken).read().decode('utf-8').encode('utf-8'));
print jsonObject;
Run Code Online (Sandbox Code Playgroud)
不幸的是,即使在decoding和encoding我得到了这样的结果:
{u'meta': {u'code': 200}, u'data': {u'username': u'*******', u'bio': u'\u0639\u06a9\u0633 \u062f\u0648 \u0646\u0641\u0631\u062a\u0648\u0646 \u0631\u0648 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f\U0001f48f\U0001f491', u'website': u'', u'profile_picture': u'*****', u'full_name': u'\U0001f451\u0639\u0634\u0642 \u0647\u0627\u06cc \u0627\u06cc\u0631\u0627\u0646\u06cc\U0001f451', u'counts': {u'media': 31, u'followed_by': 12449, u'follows': 0}, u'id': u'*******'}}
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能正确获取角色?
请原谅我丑陋的新手代码,我正在学习。我正在从 OMDB API 提取电影数据,但是当我将其移动到 CSV 时,许多电影都出现 UnicodeEncodeError 错误。例如,可能是因为演员的名字有重音。我想 1.) 确定哪些电影有问题,2.) 跳过它们,和/或 3.) 最好纠正错误。我目前所拥有的只是在发生错误时传递整个过程。由于我是新手,正在寻找一个简单的修复方法。
\n\nimport csv\nimport os\nimport json\nimport omdb\n\nmovie_list = [\'A Good Year\', \'A Room with a View\', \'Anchorman\', \'Am\xc3\xa9lie\', \'Annie Hall\', \'Before Sunrise\']\n\ndata_list = []\n\ntextdoc = open(\'textdoc.txt\',\'w\')\n\nfor w in movie_list:\n x = omdb.request(t=w, fullplot=True, tomatoes=True, r=\'json\')\n y = x.content\n z = json.loads(y)\n data_list.append([z["Title"], z["Year"], z["Actors"], z["Awards"], z["Director"], z["Genre"], z["Metascore"], z["Plot"], z["Rated"], z["Runtime"], z["Writer"], z["imdbID"], z["imdbRating"], z["imdbVotes"], z["tomatoRating"], z["tomatoReviews"], z["tomatoFresh"], z["tomatoRotten"], z["tomatoConsensus"], z["tomatoUserMeter"], z["tomatoUserRating"], z["tomatoUserReviews"]])\n\ntry:\n with open(\'Films.csv\', \'w\') as g:\n …Run Code Online (Sandbox Code Playgroud) 我正在使用 python 的 twitter 流包。我目前正在使用以 unicode 编写的关键字来搜索包含该词的推文。然后我使用 python 创建推文的数据库 csv 文件。但是,当我将它们保存在 csv 中时,我想将它们转换回阿拉伯符号。
我收到的错误都类似于“数据错误,位置 ___ 的 ASCII 字符不在 128 的范围内”。
这是我的代码:
class listener(StreamListener):
def on_data(self, data):
try:
#print data
tweet = (str((data.split(',"text":"')[1].split('","source')[0]))).encode('utf-8')
now = datetime.now()
tweetsymbols = tweet.encode('utf-8')
print tweetsymbols
saveThis = str(now) + ':::' + tweetsymbols.decode('utf-8')
saveFile = open('rawtwitterdata.csv','a')
saveFile.write(saveThis)
saveFile.write('\n')
saveFile.close()
return True
Run Code Online (Sandbox Code Playgroud)