簡體   English   中英

讀取csv文件並將對象與列表進行比較

[英]Reading csv file and compare objects to a list

我有一個.txt文件,主列表,其字符串如下:

f
r
y
h
g
j

而且我有一個.csv文件,配方列表,具有以下行:

d,g,r,e,w,s
j,f,o,b,x,q,h
y,n,b,w,q,j

我的程序將拋出每一行並計算屬於主列表的對象數,例如,在這種情況下,結果是:2 3 2我總是得到0,錯誤一定很愚蠢,但我無法弄清楚:

from __future__ import print_function
import csv

primary_data =  open('test_list.txt','r') 
primary_list = [] 
for line in primary_data.readlines():
    line.strip('\n')
    primary_list.append(line)

recipes_reader = csv.reader(open('test.csv','r'), delimiter =',')

for row in recipes_reader:
    primary_count = 0
    for i in row:
        if i in primary_list:
            primary_count += 1
    print (primary_count)

讀入primary_list會為每個數字添加\\n您應該將其刪除:

在附加到primary_list請執行以下操作:

for line in primary_data:
    primary_list.append(line.strip())

注意strip 而且,如您所見,您實際上並不需要realines ,因為當primary_data是文件對象時, for line in primary_data已經realines您的需要。

現在,作為一般性評論,由於您使用的是主要列表進行查找,因此建議您將列表替換為一組-如果列表很大,這將使處理速度更快。 Python集對於基於鍵的查找非常有效,而列表並不是為此目的而設計的。

以下代碼可以解決問題。

from __future__ import print_function
import csv
primary_data =  open('test_list.txt','r')

primary_list = [line.rstrip() for line in primary_data]

recipies_reader = csv.reader(open('recipies.csv','r'), delimiter =',')
for row in recipies_reader:
    count = 0
    for i in row:
       if i in primary_list:
           count += 1

    print (count)

輸出量

2
3
2

這是基本的踏板到金屬版本:

from __future__ import print_function
import csv

with open('test_list.txt', 'r') as f: # with statement ensures your file is closed
    primary_set = set(line.strip() for line in f)

with open('test.csv', 'rb') as f: #### see note below ###
    for row in csv.reader(f): # delimiter=',' is the default
        print(sum(i in primary_set for i in row)) # i in primary_set has int value 0 or 1

注意:在Python 2.x中,始終以二進制模式打開csv文件。 在Python3.x中,請始終使用newline=''打開CSV文件newline=''

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM