【发布时间】:2016-02-12 20:41:33
【问题描述】:
下面给出了我试图从中提取信息的行示例。
[02/Jan/2015:08:07:32] "GET /click?article_id=162&user_id=5475 HTTP/1.1" 200 4352
[02/Jan/2015:08:08:43] "GET /click?article_id=139&user_id=19550 HTTP/1.1" 200 3078
[02/Jan/2015:08:09:01] "GET /click?article_id=87&user_id=9408 HTTP/1.1" 200 2005
[02/Jan/2015:08:09:18] "GET /click?article_id=175&user_id=9408 HTTP/1.1" 200 3467
我尝试了几种方法。其中之一是
with open('C:/Users/.../access_log/access.log', 'r') as read:
for line in read:
if "click?" in line:
article_id = line.split('article_id=')[1]
user_id = line.split('user_id=')[1]
article.write(article_id)
user.write(user_id)
我需要提取date、article_id、author_id 和最后两组数字。通过使用上面的代码,我的输出看起来像这样
对于 user_id 文件,输出看起来像
5475 HTTP/1.1" 200 4352
这里的 5475 是我需要的 id,但该行的其余部分随它一起提供。同样对于article_id 文件,输出类似于
162&user_id=5475 HTTP/1.1" 200 4352
这里 162 是我需要的值,但我再次得到该值的其余部分。
我尝试的第二种方法是这样的
for line in read:
article_id = re.match('.*article_id=(\d+)', line)
user_id = re.match('.*user_id=(\d+)', line)
if article_id and article_id.lastindex > 0:
ids.write(article_id.group(1))
然后我得到这样的输出
1621398717554254614225905016411314518885592112332
我无法在 excel 中执行此操作,因为 excel 需要处理的数据点太多,并且所有文件都无法正确加载。另外我需要确保当我从每一行中提取数据点(date,article_id,author_id,....)时,每个数据点对应于同一行的另一个数据点,所以我可以查看是否有缺失值。
本质上是有办法让我把它变成这样的
[02/Jan/2015:08:07:32] "GET /click?article_id=162&user_id=5475 HTTP/1.1" 200 4352
[02/Jan/2015:08:08:43] "GET /click?article_id=139&user_id=19550 HTTP/1.1" 200 3078
[02/Jan/2015:08:09:01] "GET /click?article_id=87&user_id=9408 HTTP/1.1" 200 2005
[02/Jan/2015:08:09:18] "GET /click?article_id=175&user_id=9408 HTTP/1.1" 200 3467
进入这个
Date Article_id user_id Response_code Content size
02/Jan/2015:08:07:32 162 5475 200 4352
02/Jan/2015:08:08:43 139 19950 200 3078
【问题讨论】:
-
我已经成功地使用docs.python.org/2/library/string.html#formatspec 将表格打印到控制台(或文件),它允许您向左/向右填充、对齐并确保所有数据在打印到一个文件。
标签: python text-files