所以在我的python代码运行后,我输入输入,程序就停止了。不知道逻辑错误是啥[关闭]
Posted
技术标签:
【中文标题】所以在我的python代码运行后,我输入输入,程序就停止了。不知道逻辑错误是啥[关闭]【英文标题】:So after my python code runs, I enter input, the program just stops. Don't know what the logic error is [closed]所以在我的python代码运行后,我输入输入,程序就停止了。不知道逻辑错误是什么[关闭] 【发布时间】:2021-09-25 16:11:18 【问题描述】:我正在尝试为 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 行,如果该行打印成功,则取出标识号。
这是某种逻辑错误吗?我想不通。
【问题讨论】:
也许如果您打印每个row
,您将能够看到它实际包含的内容。
您能详细说明一下吗?我以为我确实打印了行
如果您打印了行,您应该能够看到它们包含的内容以及其中是否有您正在寻找的元素作为元素。去掉if
约束,这样你的代码就只打印每一行,看看你得到了什么。
您确定使用了正确的分隔符吗? csv 模块默认使用逗号。
@sommervold 分隔符?
【参考方案1】:
您的 csv 文件中可能没有标识号,在这种情况下,由于您的“if”语句,不会打印任何内容。您可以检查您是否找到了该号码,如果是,则中断(如果您不想检查其他行以获取该号码的另一个实例),如果没有,则打印您从未找到该号码。
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 用于您想要做的事情。在 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
编辑以将我们在 cmets 中讨论的所有内容放在一起:
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)
【讨论】:
谢谢!最后一件事,我可以修改代码以包含多个输入文件,对吗?我的意思是搜索 10 个不同的文件。 当然!例如,您可以获取目录中所有文件的列表,或者(不理想)手动指定列表中的每个文件,然后遍历列表并保持其余代码相同: for f in file_list: with open(f, 'r') as file: ... 如果您需要这部分的帮助,请告诉我。 我也认为代码中可能存在错误或者我的逻辑错误,但是当我放入第一行时它什么也没说返回,即使值在那里。 你能添加一个循环来搜索每一行吗?第 0 行是标识符,第 1 行是数据。出了点问题 是的,您可以遍历每行中的每个 col:for row in data: for col in row[1:]:(假设您想跳过 col 0)如果 row[col] = = 识别号。另外,我刚刚注意到您在 Identificationnumber 周围有 () 并且您可能不想要那个 - 它会检查单元格中是否有一个 tuple() 与 Identificationnumber,而不是检查数字。也许这就是问题所在。以上是关于所以在我的python代码运行后,我输入输入,程序就停止了。不知道逻辑错误是啥[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
即使有一个带有特定代码的if语句用于我的输入,我的程序也会在我输入输入时停止[关闭]