如何使用python读取文本文件中的特定行

如何使用python读取文本文件中的特定行,python,file,text,Python,File,Text,希望让我的代码读取一个文本文件,并将用户输入的行号存储为num,然后使用变量num读取另一个文件上的同一行。 目前,读取第一个文本文件的第一步的代码正在工作,并且已经过测试,但是第二部分在执行后没有显示任何内容。我已经改变了很多事情,但仍然被卡住了。非常感谢您的帮助 这是我的密码: print("Check Stock") ca = input("Check all barcodes?") if ca == "y": for x in range(0,5): with o

希望让我的代码读取一个文本文件,并将用户输入的行号存储为num,然后使用变量num读取另一个文件上的同一行。 目前,读取第一个文本文件的第一步的代码正在工作,并且已经过测试,但是第二部分在执行后没有显示任何内容。我已经改变了很多事情,但仍然被卡住了。非常感谢您的帮助

这是我的密码:

print("Check Stock")
ca = input("Check all barcodes?")
if ca == "y":
    for x in range(0,5):
        with open ("stockbarcodes.txt") as f:
            linesa = f.readlines()
            print(linesa[x])

        with open ("stockname.txt") as f:
            linesb = f.readlines()
            print(linesb[x])
            print(" ")

else:    
    bc = input("Scan barcode: ")
    f1 = open ("stockname.txt")
    for num, line in enumerate(f1, 1):
        if bc in line:
            linesba = f1.readlines()
            print(linesba[num])

正如用户Ikriemer所指出的,您似乎希望根据条形码检索股票名称。对于这类任务,您需要创建一个规范化的数据库,它描述实体、属性和关系。正如你所看到的,有很多事情需要考虑

这段代码是在Mac OS上测试的,但考虑到OP的评论(他似乎在使用windows),如果没有指定数据类型,这是可以的

考虑到上述解决方案可能没有您希望的那么快,您还有两个选择

第一选项
由于我无法检查示例文件的内容,您在代码中显示的策略使我相信您假设两个文件都已订购,条形码文件的第一行对应于库存名称文件中的第一项。因此,您可以在类似数组的数据结构中查询元素(条形码)的索引,并检索存储在同一位置的另一个数组(名称)的元素。代码如下:

import numpy as np


print("Check Stock")
ca = input("Check all barcodes? (y/n): ")
if ca == "y":
    for x in range(0, 5):
        with open("stockbarcodes.txt") as f:
            linesa = f.readlines()
            print(linesa[x], sep="")

        with open("stockname.txt") as f:
            linesb = f.readlines()
            print(linesb[x], sep="")
            print(" ")
else:
    try:
        codes = np.genfromtxt("stockbarcodes.txt").tolist()
        names = np.genfromtxt("stockname.txt", dtype=np.str).tolist()
        bc = input("Scan barcode: ")
        index = codes.index(int(bc))
        print(names[index])
    except IndexError:
        print("Bar code {} not found".format(bc))
第二选项
此选项可以被视为类似数据库文件的变通方法。您需要以某种方式存储数据,以便搜索与特定条目关联的值。这样的任务可以用字典来完成。只需将else子句替换为以下内容:

else:
    try:
        codes = np.genfromtxt("stockbarcodes.txt").tolist()
        names = np.genfromtxt("stockname.txt", dtype=np.str).tolist()
        table = {k: v for k, v in zip(codes, names)}
        bc = input("Scan barcode: ")
        print(table[int(bc)])
    except KeyError:
        print("Bar code {} not found".format(bc))

同样,在字典理解中,我们假设两个文件都是有序的。我强烈建议您验证这一假设,以保证第一个条形码对应于第一个库存,第二个对应于第二个,以此类推。只有在这之后,您可能希望将字典存储为一个文件,这样您就可以随意加载和查询它。也许你可以考虑改写你的问题。到目前为止,我还不清楚你想做什么。我不知道你把电话号码存储在哪里。我可以看到您正在接受else语句中的行内容作为输入,但您只是使用
num
进行迭代-您从未在其中存储任何内容?我不确定,如果我正确理解您试图执行的操作…例如,如果用户输入为
8
,您是否要阅读“stockname.txt”的第8行或者您想在“stockbarcodes.txt”中找到8所在的行,然后从“stockname.txt”中读取这一行吗?我认为后者更有意义,但您的代码看起来并不是您的目标……使用您的代码后,我得到了以下错误:回溯(最近一次调用):文件“C:\Users\harve\Documents\Stock Inventory\invmantest.py”,第40行,在code=np.genfromtxt(“stockbarcode.txt”,dtype=np.int32.tolist()文件中“C:\Users\harve\AppData\Local\Programs\Python\Python37-32\lib\site packages\numpy\lib\npyio.py”,第2149行,在genfromtxt output=np.array中(数据,数据类型)OverflowerError:Python int太大,无法转换为C longth此错误与np.genfromtxt中的dtype参数有关。如果让numpy为您猜测dtype,则可以。请查看编辑。