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

时间:2018-07-11 14:52:43

标签: python file text

希望让我的代码读取一个文本文件,并将用户输入的行号存储为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])

1 个答案:

答案 0 :(得分:0)

正如用户Ikriemer指出的那样,您似乎想基于条形码检索股票名称。对于此类任务,您宁愿创建规范化的数据库,该数据库描述实体,属性和关系。正如您所here所言,有很多事情要考虑。

此代码已经在Mac OS上进行了测试,但是考虑到OP的注释(似乎正在使用Windows),如果未指定dtype可以。

考虑到上述解决方案可能没有您想要的那么快,您还有两种选择。

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

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))

同样,在字典理解中,我们假设两个文件都是有序的。我强烈建议您验证此假设,以保证第一个条形码对应于第一个库存,第二个对应第二个,依此类推。只有在那之后,您才可以将字典存储为文件,以便您可以加载并查询它。为此,请检查this answer