1

ファイル内のインデックスをチェックしてそれらが一致するかどうかを確認するためのこのコードがありますが、最初にインデックスを選択するのに問題があります。現時点では値がリストに表示されていないため、これを実行できるようにするにはどうすればよいですか。

def checkOS():
    fid = open("C:/Python/NSRLOS.txt", 'r')
    fhand = open("C:/Python/sha_sub_hashes.out", 'r')
    sLine = fhand.readline()
    line = fid.readline()
    outdata = []
    print line
checkOS()

今それは印刷します:

"190","Windows 2000","2000","609"

印刷したいだけです:(そうindex[0]

190

そして、私が試してみるとindex[0]、私はただ得' " 'ます。したがって、文字列全体の最初の値として、リストでインデックスを選択できるようにする必要があります。

4

4 に答える 4

5

を使用line.split(",")して行をカンマで分割してから、結果をスライスして引用符を取り除きます。

例:

>>> line = '"190","Windows 2000","2000","609"'
>>> sliced = line.split(',')
>>> print sliced
['"190"', '"Windows 2000"', '"2000"', '"609"']
>>> first_item = sliced[0][1:-1]
>>> print first_item
190

...そして、関数に抽象化された全体を次に示します。

def get_item(line, index):
    return line.split(',')[index][1:-1]

(もちろん、これは、行内のすべての項目がカンマで区切られていること、それらがすべて引用符で囲まれていること、カンマの後にスペースがないことを前提としています (ただし、item.strip()空白を削除することでそれを処理できます)コメントに記載されているように、引用された項目にコンマが含まれている場合にも失敗します。)

于 2012-07-09T16:04:12.873 に答える
1

csv.reader良いスタートになるでしょう。

import csv
from itertools import izip

with open('file1.csv') as fid, open('file2.csv') as fhand:
    fidcsv = csv.reader(fid)
    fhandcsv = csv.reder(fhand)
    for row1, row2 in izip(fidcsv, fhandcsv):
        print row1, row2, row[1] # etc...

を使用csv.readerすると、純粋なstrメソッドよりもCSV形式のファイルをより適切に処理できます。はizip両方のファイルからline1、2、3などを読み取り(ただし、ファイル内の最短の行数で停止します)、次に両方のファイルからline2などを読み取ります...(これが必要かどうかはわかりませんが) )。row1とrow2は最終的に列のリストになり、インデックスif row1[0] == row2[0]:または使用したいロジックだけになります。

于 2012-07-09T16:13:10.033 に答える
1

[0]文字列に適用すると、最初の文字のみが返されます。

カンマ区切りのリストの最初の項目が必要です。csv独自の解析コードを作成することも、すでにこれを処理しているモジュールを使用することもできます。

import csv

def get_first_row(fname):
    with open(fname, 'rb') as inf:
        incsv = csv.reader(inf)
        try:
            row = incsv.next()
        except StopIteration:
            row = [None]
        return row

def checkOS():
    fid = get_first_row("C:/Python/NSRLOS.txt")[0]
    fhand = get_first_row("C:/Python/sha_sub_hashes.out")[0]
    print fid
于 2012-07-09T16:05:00.470 に答える
1

そして、split()各コンマを分割して最初の値を返すために使用しようとすると? これを試して。

于 2012-07-09T16:06:49.150 に答える