我正在尝试将json文件转换为csv文件。json文件来自tweepy。
import json
import csv
fo = open('Sclass.json', 'r')
fw = open('Hasil_Tweets.csv', 'a')
for line in fo:
try:
tweet = json.loads(line)
fw.write(tweet['id'],tweet['timestamp_ms'],tweet['user']['name'],tweet['user']['statuses_count'],tweet['user']['friends_count'],tweet['user']['followers_count'],tweet['place']['bounding_box']['coordinates'],tweet['text']+"\n")
except:
continue
但是当我打印它的时候,它起作用了。当我只写fw.write(鸣叫['text'])
时,它就起作用了。
我是一个新手在Python和twepy。但是我的直觉告诉我,这个问题与json文件本身有关。
这是json文件本身:
{
"created_at": "Wed Oct 11 08:36:21 +0000 2017",
"id": 918032510927355904,
"id_str": "918032510927355904",
"text": "@irfanzayo @puisisi @tasyak Lo tuh kebiasaan overthinking \ud83d\ude24",
"display_text_range": [
28,
59
],
"source": "<a href=\"http://twitter.com/download/android\" rel=\"nofollow\">Twitter for Android</a>",
"truncated": false,
"in_reply_to_status_id": 918032029094047746,
"in_reply_to_status_id_str": "918032029094047746",
"in_reply_to_user_id": 60049976,
"in_reply_to_user_id_str": "60049976",
"in_reply_to_screen_name": "irfanzayo",
"user": {
"id": 59980455,
"id_str": "59980455",
"name": "Mutiara Sisyanni D",
"screen_name": "MutiaraSisyanni",
"location": "Jakarta, Indonesia",
"url": "http://mutiarasyn.wixsite.com/mutiarasisyanni",
"description": null,
"translator_type": "none",
"protected": false,
"verified": false,
"followers_count": 354,
"friends_count": 237,
"listed_count": 1,
"favourites_count": 326,
"statuses_count": 6507,
"created_at": "Sat Jul 25 04:31:47 +0000 2009",
"utc_offset": 25200,
"time_zone": "Jakarta",
"geo_enabled": true,
"lang": "en",
"contributors_enabled": false,
"is_translator": false,
"profile_background_color": "FA8C9E",
"profile_background_image_url": "http://abs.twimg.com/images/themes/theme5/bg.gif",
"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme5/bg.gif",
"profile_background_tile": false,
"profile_link_color": "FF8A94",
"profile_sidebar_border_color": "FFFFFF",
"profile_sidebar_fill_color": "99CC33",
"profile_text_color": "3E4415",
"profile_use_background_image": false,
"profile_image_url": "http://pbs.twimg.com/profile_images/486497248293826560/FANdzhL9_normal.jpeg",
"profile_image_url_https": "https://pbs.twimg.com/profile_images/486497248293826560/FANdzhL9_normal.jpeg",
"profile_banner_url": "https://pbs.twimg.com/profile_banners/59980455/1404826066",
"default_profile": false,
"default_profile_image": false,
"following": null,
"follow_request_sent": null,
"notifications": null
},
"geo": null,
"coordinates": null,
"place": {
"id": "66555622726ab358",
"url": "https://api.twitter.com/1.1/geo/id/66555622726ab358.json",
"place_type": "city",
"name": "Setia Budi",
"full_name": "Setia Budi, Indonesia",
"country_code": "ID",
"country": "Indonesia",
"bounding_box": {
"type": "Polygon",
"coordinates": [
[
[
106.817351,
-6.24152
],
[
106.817351,
-6.201177
],
[
106.852353,
-6.201177
],
[
106.852353,
-6.24152
]
]
]
},
"attributes": {}
},
"contributors": null,
"is_quote_status": false,
"quote_count": 0,
"reply_count": 0,
"retweet_count": 0,
"favorite_count": 0,
"entities": {
"hashtags": [],
"urls": [],
"user_mentions": [
{
"screen_name": "irfanzayo",
"name": "irfan zayanto",
"id": 60049976,
"id_str": "60049976",
"indices": [
0,
10
]
},
{
"screen_name": "puisisi",
"name": "Puisi Pancara",
"id": 32809069,
"id_str": "32809069",
"indices": [
11,
19
]
},
{
"screen_name": "tasyak",
"name": "Tasya Kurnia",
"id": 41986880,
"id_str": "41986880",
"indices": [
20,
27
]
}
],
"symbols": []
},
"favorited": false,
"retweeted": false,
"filter_level": "low",
"lang": "in",
"timestamp_ms": "1507710981481"
}
另一个错误:
Traceback(最近一次调用):文件"C:\用户\用户\桌面\fase 1-20170930T062552Z-001\transformCSV. py",第7行,在推=json.loads(行)文件"C:\用户\用户\AppData\本地\程序\Python\Python36-32\lib\json__init__. py",第354行,以加载为单位html" target="_blank">返回_default_decoder.decode文件"C:\用户\用户\AppData\本地\程序\Python\Python36-32\lib\json\decoder.py",第339行,解码obj,end=self.raw_decode(s,idx=_w(s,0). end())文件"C:\用户\用户\AppData\本地\程序\Python\Python36-32\lib\json\decoder.py",第357行,raw_decode从无引发JSONDecodeError("期望值",s,err.value)json.decoder.JSONDecodeError:期望值:第2行第1栏(字符1)
Traceback (most recent call last):
File "C:\Users\Tanabata\Desktop\Putang ina mo\spli.py", line 8, in <module>
tweet = json.load(fo)
File "C:\Users\Tanabata\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py", line 299, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "C:\Users\Tanabata\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "C:\Users\Tanabata\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 342, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 3 column 1 (char 2893)
Json文件本身
我加上这个作为另一个答案。
您共享的*. json实际上是一个包含多个json字符串的大文件,但只是每两行。我不知道你是如何从一开始就得到这个文件的,但是你可以用这个来阅读:
import json
import pandas as pd
with open("Sclass.json") as f:
data = [json.loads(row.strip()) for row in f.readlines()[0::2]]
然而,当将这个结构读取到数据框时,您可以看到它实际上不是任何清晰的结构:
pd.DataFrame(data)
结论:你的问题完全是另一回事。
当你使用桌子(csv是其中之一)时,想想熊猫(我的观点)。
在这种情况下,我们可以使用熊猫json_normalize来解释您的json文件。
import json
from pandas.io.json import json_normalize
with open("Sclass.json.json") as f:
df = json_normalize(json.load(f))
cols = ["id","timestamp_ms","user.name",
"user.statuses_count","user.friends_count","user.followers_count",
"place.bounding_box.coordinates","text"]
df[cols].to_csv("Hasil_Tweets.csv",sep=",",index=False) # outputs to csv
熊猫有许多输出选项,其中之一是html表。我将用这个来显示outut:
print(df[cols].to_html(index=False)) # outputs to html to show result
输出
html lang-html prettyprint-override"><table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th>id</th>
<th>timestamp_ms</th>
<th>user.name</th>
<th>user.statuses_count</th>
<th>user.friends_count</th>
<th>user.followers_count</th>
<th>place.bounding_box.coordinates</th>
<th>text</th>
</tr>
</thead>
<tbody>
<tr>
<td>918032510927355904</td>
<td>1507710981481</td>
<td>Mutiara Sisyanni D</td>
<td>6507</td>
<td>237</td>
<td>354</td>
<td>[[[106.817351, -6.24152], [106.817351, -6.2011...</td>
<td>@irfanzayo @puisisi @tasyak Lo tuh kebiasaan o...</td>
</tr>
</tbody>
</table>
您不使用csv
。您必须创建一个编写器
:
import json
import csv
with open('Sclass.json', 'r') as fo, open('Hasil_Tweets.csv', 'a') as fw:
writer = csv.writer(fw)
for line in fo:
tweet = json.loads(line)
writer.writerow([tweet['id'],tweet['timestamp_ms'],tweet['user']['name'],
tweet['user']['statuses_count'],tweet['user']['friends_count'],
tweet['user']['followers_count'],
tweet['place']['bounding_box']['coordinates'],tweet['text']])
对于第二个问题,您似乎没有json行文件,而是一个包含单个json数据集的文件。所以逐行读取是错误的,您应该将文件作为一个整体来读取:
with open('Sclass.json', 'r') as fo:
tweet = json.load(fo)
with open('Hasil_Tweets.csv', 'a') as fw
writer = csv.writer(fw)
writer.writerow([tweet['id'],tweet['timestamp_ms'],tweet['user']['name'],
tweet['user']['statuses_count'],tweet['user']['friends_count'],
tweet['user']['followers_count'],
tweet['place']['bounding_box']['coordinates'],tweet['text']])
我正在尝试将以下数据写入csv文件。这些数据是employdetails name1-surname1-place1 名称4-surname4-place4 我希望输出在CSV文件上,一个在另一个下面,在单独的行上。 我写了下面的代码 -KD
问题内容: 我有一个pandas数据框,我想将其写入CSV文件。我正在使用以下方法: 并得到错误: 有什么方法可以轻松解决此问题(即我的数据框中有Unicode字符)吗?有没有一种方法可以使用例如“ to-tab”方法(我认为不存在)写入制表符分隔文件而不是CSV? 问题答案: 要用制表符分隔,可以使用参数: 要使用特定的编码(例如),请使用参数:
问题内容: 嗨,我正在尝试使用python将csv文件写入SQL Server数据库中的表中。传递参数时遇到错误,但是手动进行操作时不会遇到任何错误。这是我正在执行的代码。 错误:pyodbc.DataError :(“ 22001”,“ [22001] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]字符串或二进制数据将被截断。(8152)(SQLEx
问题内容: 我有一个包含内容的文件 如何使用Python 阅读? 同样,如果我有 如何data使用Python 写入CSV文件? 问题答案: 以下是一些最小的完整示例,这些示例如何读取CSV文件以及如何使用Python编写CSV文件。 Python 2 + 3:读取CSV文件 Python 之后,的内容data_read是 Unicode和Python 2.X 如果要编写Unicode,则必须安装
我正在使用Flume从我的本地文件系统写一些CSV文件到HDFS。 我想知道HDFS水槽的最佳配置是什么,这样本地系统上的每个文件都会在HDFS以CSV格式准确复制。我希望Flume处理的每个CSV文件都是单个事件,作为单个文件刷新和写入。尽可能多地,我希望文件是完全一样的,没有标题的东西等。 我需要在这些值上加什么来模拟我想要的行为? 如果还有其他Flume代理配置变量需要更改,请提供。 如果这
我是这里的蟒蛇初学者。最近我一直试图从一个当地的中文网站上抓取一些数据。我成功地将信息存储为矩阵(列表列表),但是当我试图将其写入csv文件时,我得到了一些混乱的东西。下面是代码: 我使用的是Python3.4,有人能告诉我哪里出了问题,以及如何改进代码吗?非常感谢!马可