0

文字列内の値を見つけることは可能ですか。値はCSV内の任意のフィールド値の1つです。例えば..

values.csv:

field1,field2,field3
1,abc,123
2,def,456
3,ghi,789
4,jkl,012,
..,..,..

したがって、CSVのフィールド(それほど大きくはなりません)を使用して、(すでに定義されている)行にこれらの値(つまり、'abc | def | ghi | jkl')が含まれているかどうかを確認できます。したがって、次の結果になります。予想された:

'This string is abc' = TRUE
'This is a string' = FALSE
'This def is good' = TRUE

したがって、ここでは、動的な値を使用するifステートメントを探しているので、コードに適合させることができます...現在line、校正段階として印刷しているので、すでにこれを持っています。

アップデート:

@korylprinceの回答はここで役立ち、関数を次のように少し変更しました。

def checkString(text):
    for search in searches:
        #print search <--- TESTING
        if search not in text:
            #print "FALSE" <--- TESTING
            test="FALSE"
        else:
            #print "TRUE" <--- TESTING
            test="TRUE"
            break
     #print test <--- TESTING
     ....

乾杯、

4

3 に答える 3

3
# Your parsed csv file
csv = ['abc', '123', '2', 'def', '456', '3', 'ghi', '789', '4', 'jkl', '012']
lines = ['This string is abc', 'This is a string', 'This def is good']

for line in lines:
    print line, ':', any(word in line for word in csv)

出力:

This string is abc : True
This is a string : False
This def is good : True
于 2012-10-01T15:43:49.587 に答える
1

あなたが何を望んでいるかを正確に理解するのは少し難しいです。

あなたが言ったことから、私はあなたがcsvファイル、values.csvを持っていることを意味していると思います。

このcsvファイルから、2番目の列のすべての値を取得し、それらをリストに入れます。

次に、指定した文字列について、それらの値の1つが文字列に含まれているかどうかを確認します。

これを試して:

# open file and parse values
with open('values.csv') as f:                                               
    searches = [x.split(',')[1] for x in f.read().splitlines()]

# function to check string
def checkString(text):
    # iterate over searches and check each one
    for search in searches:
        if search in text:
            return True
    return False

これを行うにはもっと効率的な方法がありますが、レコードと文字列が数個(数百または数千)しかない場合は、これで問題ありません。

于 2012-10-01T15:49:23.307 に答える
1

今回はモジュールDictReaderから使用する別のバリ​​エーション:csv

import csv

lines = ['This string is abc', 'This is a string', 'This def is good']

with open(r'C:\Users\BioGeek\Desktop\values.csv') as f:
    reader = csv.DictReader(f)
    for row in reader:
        word = row[reader.fieldnames[1]] # only take words from the second column
        for line in lines:
            print "Is '{0}' in '{1}': {2}".format(word, line, word in line)

これは出力を生成します:

Is 'abc' in 'This string is abc': True
Is 'abc' in 'This is a string': False
Is 'abc' in 'This def is good': False
Is 'def' in 'This string is abc': False
Is 'def' in 'This is a string': False
Is 'def' in 'This def is good': True
Is 'ghi' in 'This string is abc': False
Is 'ghi' in 'This is a string': False
Is 'ghi' in 'This def is good': False
Is 'jkl' in 'This string is abc': False
Is 'jkl' in 'This is a string': False
Is 'jkl' in 'This def is good': False
于 2012-10-01T15:56:51.290 に答える