比较Python中csv文件中的两行

2024-09-28 13:31:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个曼哈顿距离函数,将比较两行从一个csv文件。我已经有一个函数从一个文件中读取所有的行,但是我无法从这个函数中访问“row”,以便在第二个函数中进行比较。我得到的错误是“name‘row’not defined”。 这是我的密码:

def load_from_csv(filename):    
    with open(filename,'r') as csvfile: 
        reader = csv.reader(csvfile, delimiter=',', quotechar='|') 
        for row in reader:
            print(row)
        return row 

load_from_csv('data.csv') 

def manhattan_distance(x,y):
 return sum(abs(a-b) for a,b in zip(x,y))

print (manhattan_distance(row[1],row[2]))

csv文件的示例(前两行):

14.23 1.71 2.43 15.6 127 2.8 3.06 0.28 2.29 5.64 1.04 3.92 1065

13.2 1.78 2.14 11.2 100 2.65 2.76 0.26 1.28 4.38 1.05 3.4 1050

抱歉,如果这是一个愚蠢的问题,但我不擅长Python,我正在努力寻找一个相关的在线答案。你知道吗


Tags: 文件csvcsvfile函数infromforreturn
3条回答

问题是row只能在for循环中访问。如果要读取csv的所有内容,可以在load_from_csv函数中执行以下操作:

def load_from_csv(filename):
    with open(filename,'r') as csvfile:
        return [row for row in csv.reader(csvfile)]

您试图返回一个不存在的变量;row

for row in reader:
        print(row)
return row

声明for row in reader,这意味着可以在循环中使用row。但是,您的return语句落在循环之外,因此导致未定义它的错误。你知道吗

尝试将CSV行调用到列表,然后从函数返回列表。你知道吗

def load_from_csv(filename):    
    with open(filename,'r') as csvfile: 
        reader = csv.reader(csvfile, delimiter=',', quotechar='|')
        data = list(reader)
    return data 
def load_from_csv(filename):    
    with open(filename,'r') as csvfile: 
        reader = csv.reader(csvfile, delimiter=',', quotechar='|')

        WHAT_TO_RETURN = [] #an empty list

        for row in reader:
            # print(row) # don't do that

            GET_RID_OF_SPACES = row.split() # this is now a list

            WHAT_TO_RETURN.append(GET_RID_OF_SPACES)

    return WHAT_TO_RETURN 

# this is a list which contains one list for every row in your csv
some_rows_of_data = load_from_csv('data.csv')

def manhattan_distance(x,y):
   return sum(abs(a-b) for a,b in zip(x,y))

my_function_result = manhattan_distance( some_rows_of_data[0],
                                         some_rows_of_data[1] )

print(my_function_result)

像这样的方法应该更有效。
你不能return某个东西在使用时不存储。
load_from_csv结尾有return row。你知道吗

但是,当您使用load_from_csv时,您只是在文件中直接运行它。您需要将返回值存储在变量中,以便以后使用。i、 例如,store_it = load_from_csv("somefile.csv")现在,rowreturn转换成store_it并保存在一个变量中。你知道吗

当然,您的load_from_csv函数还有其他问题,但最重要的是要知道使用return做什么,以及如何“捕获”返回的内容。你知道吗

祝你Python节快乐,新年快乐。你知道吗

相关问题 更多 >

    热门问题