创建json对象时,writelines()出错

时间:2014-10-15 03:35:44

标签: python json

我想将文本文件转换为json对象,而我的输入文件即文本文件包含大量对象(4 mb)。当我尝试将json对象写入文本文件时,它会抛出一个错误。这是错误“writelines()参数必须是字符串序列”。这是我的输入文件:

created_at:03 Ekim 2014 Cuma,06:36,文章:İSTANBUL(CİHAN) - FethullahGülenHocaefendi'nin“421。 Nağme:ŞamatalarınızHaramîliğiniziÖrtemeyecek!..“isimli yeni sohbeti,herkul.orgsitesindeyayınlandı。 Hocaefendi,“Şamataylahangişirretliğikapamakistediğiniherkesanlıyor.Silinmezo zihinlerden”ifadelerinikullandı.SohbetindeAllaraRasûlü(sallallâhuleychve sellem)Efendimiz'in,“Allahımbenikendigözümdeküçük,insanlarazarındisee(yüklediğinmisoyonauygun。 created_at:06 Ekim 2014 Pazartesi,11:57,文章:KAYSERİ(CİHAN) - Kimse YokMuDerneğiKayseriŞubesi,hayırseverlerinbağışlarıylapakethalinegetirdiğikurbanetleriniihtiyaçsahiplerineuraştırdı。 Şehirdedahaöncederneğemüracaattabulunanve tespit edilenaileleriçinşehrin4ayyrınoktasındakurbanetidağıtımmerkezioluşturuldu。 Kurban etlerini alan aileler ise Kimse Yok Muileyüzleriningüldüğünüveeğğgeçenlereteşekkürettikleriniöylediler。 Geçenyılagöre位于bağışmiktarlarınınyüzde50oranındaarttığıbildirildi。 Kimse YokMuDerneği'ninKayseriŞubesi'ndeKurbanBayramınedeniylehareketlilikyaşanıyor。 Dernek,hayırseverlerinbağışladığıkurbanlarınkesimiyapıldıktansonra。这是我的代码:

    #!usr/bin/python
import sys, os
import json
inputfile = open('bugun_data_collection_KimseYokmu.txt', 'r')
outputfile = open('bugun_data_collection_json_KimseYokmu.txt', 'w') 
#shows how the dictionary looks like
reps = {"created_at": "date","article": "text"}
#reads the input file line by line
for line in inputfile:
    outputfile.writelines((line, json.dumps(reps))
inputfile.close() 
outputfile.close()

这是错误:“”第11行     inputfile.close()             ^ SyntaxError:语法无效

1 个答案:

答案 0 :(得分:0)

请注意错误消息:"writelines( ) argument must be a sequence of strings"。因为参数的第二个元素(元组类型)是dict而不是预期的字符串,所以它会被抛出。您可以使用json.dumps(reps)将其转换为字符串,如下所示:

outputfile.writelines((line, json.dumps(reps)))

此外,您已将文件关闭操作放在for循环中,当您写入或读取已关闭的文件时,这将导致另一个错误。

如果要从输入文件中提取文本,可以这样做(不处理异常):

#reads the input file line by line
outputlines = []
for line in inputfile:
    text = line.split('article : ')[1]
    date = line.split('article : ')[0].split('created_at : ')[1]
    reps = {"created_at": date,"article": text}
    outputlines.append(json.dumps(reps))
outputfile.writelines(outputlines)