所以在我的python代码运行之后,我输入输入,程序就停止了。不知道逻辑错误是什么

2024-09-30 05:30:16 发布

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

我正在尝试为CSV文件创建一个简单的解析器。我正在尝试使用最简单的方法通过解析器查找值(行)

import csv
"""
with open('C:/MAIL07072021180029.csv', 'r') as file:
     proxy = csv.reader(file)
     for row in proxy:
         print(row[0])

"""

identifyingnumber = input("What is the number? ")

with open('C:/MAIL07072021180029.csv', 'r') as file:
    data = csv.reader(file)
    for row in data:
        if row[1] == (identifyingnumber):
            print(row)

运行代码并输入代理编号(识别编号,excel中的数据)后。节目刚刚停止?这不是打印行

以下是我的csv文件中的示例数据:

Card Identifying Sequence
1873356

我打印出了第0行,如果该行打印成功,则打印出识别号

这是某种逻辑错误吗?我想不出来


Tags: csvin解析器fordataaswithopen
1条回答
网友
1楼 · 发布于 2024-09-30 05:30:16

您的csv文件中可能没有标识号,在这种情况下,由于您的“如果”语句,将不会打印任何内容。您可以检查是否找到了该号码,如果找到了,请中断(如果不想检查其他行中该号码的另一个实例),如果没有,请打印您从未找到该号码

with open('C:/MAIL07072021180029.csv', 'r') as file:
    data = csv.reader(file)
    found = False
    for row in data:
        if row[1] == (identifyingnumber):
            print(row)
            found = True
            break    # if you don't want to look for more instances of identifyingnumber
    if not found:   # aka found == False
        print('I did not find any row[1] equal to', identifyingnumber)    

我强烈推荐熊猫,因为你正在尝试做的事情。在Pandas中打开csv,然后立即检查所有行的值,而不是遍历行https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

import pandas as pd
df = pd.read_csv('C:/MAIL07072021180029.csv')
col1 = df.columns[1]
dfi = df[df[col1] == identifyingnumber]
dfi = dfi.reset_index()
print(dfi['index'].tolist())        # there could be more than 1 row with the identifier

编辑以将我们在评论中讨论的所有内容放在一起:

file_list = ['C:/MAIL07072021180029.csv','C:/other_file.csv']
for f in file_list:
    with open(f, 'r') as file:
        data = csv.reader(file)
        found = False
        for row in data:
            if found:   # aka found == True - if any column found the value, break to stop iterating
                break
            for col in range(1, len(row)):   # start at 1 to skip col 0
                if row[col] == identifyingnumber:  # (identifyingnumber) is a tuple(), you probably don't want that
                    print(row)
                    found = True
                    break    # if you don't want to look for more instances of identifyingnumber
        if not found:   # aka found == False
            print('I did not find any row[1] equal to', identifyingnumber)

相关问题 更多 >

    热门问题