2017-11-27 5 views
0

pythonで再読み込み、読み取りせずにNULLバイトを削除書きたいですほとんどの発生。ヌルバイトエラーは、おそらく私のpython 3</p> <p>私はCSVがdictreaderにファイルを読んでいますを使用していますが、国が持っているかを確認しようとしています

私は、リーダーではなく、dictreaderを使用していることに注意してください。これは私がカウンターを使用しているので必要とされます。

CSVファイルの一部の行にヌルバイト(特にパスワードフィールドにある)があり、nullバイトが気に入らないcsvリーダーに関するエラーでスクリプトが強制終了するので、問題があります。これの一例は、私のコメントの最後のサンプル行です。私はいくつかの人々が私のコード内の行でヌルバイトを取り除くのを見ました:readerobject(x.replace('\0', '') for x in csvfile)しかし、私はすでに前の行のreadobjectにcsvfileを読み込んでいるので、これを使うようには思えません。

は、ここに私のコード

''' 
sample csv lines 
Brazil,200.145.23.13,pi,raspberry,failed,None,None,None 
Brazil,200.145.23.13,pi,raspberryraspberry993311,failed,None,None,None 
China,121.201.83.134,root,123456,succeeded,None,None,None 
United Kingdom,185.38.148.238,root,123456,succeeded,None,None,None 
Croatia,5.188.10.141,root,admin,succeeded,None,None,None 
France,195.154.44.31,squid,123456,failed,None,None,None 
France,195.154.44.31,squid,123456,failed,None,None,None 
Croatia,5.188.10.141,root,123456,succeeded,None,None,None 
Croatia,5.188.10.141,root,admin,succeeded,None,None,None 
Croatia,5.188.10.141,root,123456,succeeded,None,None,None 
Netherlands,109.236.91.85,root,admin,succeeded,None,None,None 
France,51.255.160.205,root,admin,succeeded,None,None,None 
United States,207.138.132.44,root,seiko2005,failed,None,None,None 
France,212.83.150.189,support,"  ",failed,None,None,None <-- these are null bytes inside the "" 
''' 


import codecs 
from pprint import pprint 
from collections import Counter 
import csv 
linecount = 0 
import time 
country_counter = Counter() 

print("parsing CSV log file") 
with open('C:/Users/Home/Documents/kippo stuff/final lab/kippo/oldkippo4final.csv', newline='') as csvfile: 
    readerobject = csv.DictReader(csvfile, delimiter=',', fieldnames=['Country', 'IP Address', 'Username', 'Password', 'Status', 'name', 'intention', 'OS']) 
    readerobject(x.replace('\0', '') for x in csvfile) 
    for row in readerobject: 
     print(row, "\n\n") 
     linecount +=1 
     country_counter[row['Country']] +=1 
     print(linecount) 
print(country_counter.most_common(3)) 
print("the total linecount was: ", linecount) 

答えて

0

あなたは、全体のファイルを読み込む0x00の文字を交換し、その後csv.DictReaderにその新しい文字列からio.StringIOオブジェクトを渡すことができます。しかしこれはちょっとハックしたようだ。おそらく、ファイルオブジェクトの代わりに文字列から直接読み取る別の関数がcsvモジュールにありますか?

import io 

with open("oldkippo4final.csv", newline='') as csvfile: 
    data = csvfile.read() # read all 

data = data.replace("\0", "")  # get rid of null-bytes 
csvfile_repl = io.StringIO(data) # new pseudo file object 

readerobject = csv.DictReader(csvfile_repl, delimiter=',', fieldnames=['Country', 'IP Address', 'Username', 'Password', 'Status', 'name', 'intention', 'OS']) 
関連する問題

 関連する問題