无法在iPython中加载数据,以下来自" Python进行数据分析的示例" CH2

时间:2015-02-07 20:18:28

标签: python json data-analysis

我刚开始从Wes McKinnney的书“用于数据分析的Python”中学习Python。我使用Enthought Canopy 1.5.2-win-64安装了Python(因为Enthought似乎不再分发EPDFree,这在本书中推荐)。

我阻止了Wes的第一个例子,这使我无法完成本章的其余部分。第一个示例读取https://github.com/pydata/pydata-book/tree/master/ch02处可用的文本文件的第一行。这是代码:

ipython --pylab
path = 'ch02/usagov_bitly_data2012-03-16-1331923249.txt'
open(path).readline()

我只是得到一个新行ouptut '\n',而书中的输出是:

'{ "a": "Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/535.11
(KHTML, like Gecko) Chrome\\/17.0.963.78 Safari\\/535.11", "c": "US", "nk":1,
"tz": "America\\/New_York", "gr": "MA", "g": "A6qOVH", "h": "wfLQtf", "l":
"orofrog", "al": "en-US,en;q=0.8", "hh": "1.usa.gov", "r":
"http:\\/\\/www.facebook.com\\/l\\/7AQEFzjSi\\/1.usa.gov\\/wfLQtf", "u":
"http:\\/\\/www.ncbi.nlm.nih.gov\\/pubmed\\/22415991", "t":1331923247, "hc":
1331822918, "cy": "Danvers", "ll": [ 42.576698, -70.954903 ] }\n'

不幸的是,我还不知道任何JSON,但Wes Mckinney网站上提供的文件似乎与书中的文件完全不同。不确定这是否是我问题的根源。

我是Python新手,所以非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您需要使用readlines来获取所有行的列表:

open(path).readlines() # readlines

readline()读取一行。

您还可以遍历每一行:

with open(path) as f: # with closes your files
    for line in f:
          print(line)

迭代你应该得到的每一行:

{ "a": "Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/535.11 (KHTML, like Gecko) Chrome\/17.0.963.78 Safari\/535.11", "c": "US", "nk": 1, "tz": "America\/New_York", "gr": "MA", "g": "A6qOVH", "h": "wfLQtf", "l": "orofrog", "al": "en-US,en;q=0.8", "hh": "1.usa.gov", "r": "http:\/\/www.facebook.com\/l\/7AQEFzjSi\/1.usa.gov\/wfLQtf", "u": "http:\/\/www.ncbi.nlm.nih.gov\/pubmed\/22415991", "t": 1331923247, "hc": 1331822918, "cy": "Danvers", "ll": [ 42.576698, -70.954903 ] }
{ "a": "GoogleMaps\/RochesterNY", "c": "US", "nk": 0, "tz": "America\/Denver", "gr": "UT", "g": "mwszkS", "h": "mwszkS", "l": "bitly", "hh": "j.mp", "r": "http:\/\/www.AwareMap.com\/", "u": "http:\/\/www.monroecounty.gov\/etc\/911\/rss.php", "t": 1331923249, "hc": 1308262393, "cy": "Provo", "ll": [ 40.218102, -111.613297 ] }
{ "a": "Mozilla\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)", "c": "US", "nk": 1, "tz": "America\/New_York", "gr": "DC", "g": "xxr3Qb", "h": "xxr3Qb", "l": "bitly", "al": "en-US", "hh": "1.usa.gov", "r": "http:\/\/t.co\/03elZC4Q", "u": "http:\/\/boxer.senate.gov\/en\/press\/releases\/031612.cfm", "t": 1331923250, "hc": 1331919941, "cy": "Washington", "ll": [ 38.900700, -77.043098 ] }
  ...............

您必须添加一个空行作为文件的开头,否则您至少会获得第一行。

答案 1 :(得分:0)

磁盘上该文件的实际内容是什么?请注意,您传递给path的{​​{1}}与您启动open(path).readline()时所处的当前目录相关。但是,你没有找到"文件未找到"错误所以我假设文件存在于正确的位置。

您是如何检索文件以在本地使用它的?这本书并不具体。你去github页面下载了zip包吗?使用Git下载整个存储库?在浏览器中单击鼠标右键以保存文件?您是否确定实际下载了原始文件而不是代表该文件的HTML页面?

编辑:OP确认他们拥有的文件实际上是一个从浏览器中右键单击保存的文件,实际上是一个HTML文件,而不是原始的json文件。通过从存储库的首页下载整个包作为Zip,并在该包中工作,解决了这个问题。