質問編集履歴

1

追記:現在のコード

2015/06/29 04:51

投稿

Alan
Alan

スコア7

test CHANGED
File without changes
test CHANGED
@@ -3,3 +3,129 @@
3
3
  こちらのソースコードを参考にapacheのlogをDBに保存しようとしたのですが、ログでbytesの部分が"-"になっている時に下記のエラーが出てきてしまいます。どうしたらいいですか?
4
4
 
5
5
  > ValueError: invalid literal for int() with base 10: '-'
6
+
7
+
8
+
9
+ ```lang-<python>
10
+
11
+ #coding:utf8
12
+
13
+
14
+
15
+ from sqlobject import *
16
+
17
+ import sys,csv, sqlite3, datetime
18
+
19
+
20
+
21
+ logname = "short_access_log"
22
+
23
+
24
+
25
+ class ApacheDialect(csv.Dialect):
26
+
27
+ delimiter = " "
28
+
29
+ doublequote = True
30
+
31
+ lineterminator="\r\n"
32
+
33
+ quotechar='"'
34
+
35
+ quoting=0
36
+
37
+ skipinitialspace=False
38
+
39
+
40
+
41
+ class ApacheLog(SQLObject):
42
+
43
+ ip = StringCol()
44
+
45
+ remotelog = StringCol()
46
+
47
+ remoteuser= StringCol()
48
+
49
+ time = DateTimeCol()
50
+
51
+ request = StringCol()
52
+
53
+ status = IntCol()
54
+
55
+ bytes = IntCol()
56
+
57
+ referer = StringCol()
58
+
59
+ ua = StringCol()
60
+
61
+
62
+
63
+ def _set_time(self,timestr):
64
+
65
+ self._SO_set_time( datetime.datetime.strptime(timestr,"[%d/%b/%Y:%H:%M:%S") )
66
+
67
+
68
+
69
+ if __name__ == '__main__':
70
+
71
+
72
+
73
+ sqlhub.processConnection = connectionForURI('sqlite:///tmp/abc.db')
74
+
75
+ ApacheLog.createTable(ifNotExists=True)
76
+
77
+
78
+
79
+ csv.register_dialect("apache",ApacheDialect)
80
+
81
+ reader = csv.reader(open(logname),dialect="apache")
82
+
83
+
84
+
85
+ for r in reader:
86
+
87
+ ApacheLog(
88
+
89
+ ip = r[0],
90
+
91
+ remotelog = r[1],
92
+
93
+ remoteuser= r[2],
94
+
95
+ time = r[3],
96
+
97
+ #tz = r[4],
98
+
99
+ request = r[5],
100
+
101
+ status = int(r[6]),
102
+
103
+ bytes = int(r[7]),
104
+
105
+ referer = r[8],
106
+
107
+ ua = r[9]
108
+
109
+ )
110
+
111
+
112
+
113
+ ```
114
+
115
+
116
+
117
+ この場合のエラーメッセージは
118
+
119
+ > Traceback (most recent call last):
120
+
121
+ File "log2db.py", line 46, in <module>
122
+
123
+ bytes = int(r[7]),
124
+
125
+ ValueError: invalid literal for int() with base 10: '-'
126
+
127
+
128
+
129
+ です。
130
+
131
+ [参考HP変更しました。](http://d.hatena.ne.jp/lolloo-htn/20090306/1236293162#c)