按行搜索和修改CSV文件,只需一个或两个元素,不一定是所有元素

2024-10-03 19:25:05 发布

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

问题

我想知道搜索和修改2D列表中某个元素的正确算法/方法。修改后的2D列表将稍后写入csv文件。下面是我的剧本:

代码

import csv
search = input("Enter name to find: ")
replace = input("Enter name replacement: ")
pendingFile = csv.reader(open("pendingLists.csv", "r"), delimiter=",")        
#Problem 1 -> Searching and Modifying algorithm here...  
#Problem 2 -> Writing Algorithm here where the row is modified...

预期产量

>>>Enter name to find: Mark
>>>Enter name replacement: Jave

Old listfile
~listFile.csv
Job,PB01
Mark,NU01
Jumeirah,SC01

Same modified listfile
~listFile.csv
Job,PB01
Jave,NU01
Jumeirah,SC01

提出的搜索算法,我发现在网上,但仍然缺乏对修改,以综合在我的代码

for row in pendingFile:
    if search == row[0]:
        print(row)

我还是新手,我已经在google和youtube上冲浪两天了,但是这个问题还没有足够的突破。 我真的需要帮助,我是一个学生,我们的任务是创建图形用户界面POS python3tkinter作为最终项目的个人

我目前的编程问题对我来说可能是个大问题,但我真诚地感谢您的慷慨帮助


Tags: csvto代码name列表inputsearchhere
2条回答

你贴的三行碎片是正确的。 你可能会发现使用字典阅读器更方便:https://docs.python.org/3/library/csv.html#csv.DictReader。 读取完文件后,您在内存中得到一个dict列表,而不是一个神秘的0,您可以为每个访问使用一个符号列名,如下所示

for row in rows:
    if search == row['name']:
        print(f'Found {search}, converting to capitals.')
        row['name'] = search.upper()

做了几次这样的更改之后,您可能希望使用DictWriter保存更新的行

我设法构建了我想要的东西:

def dataRead():
    with open("Inventory_List.csv", "r") as my_csv:
        myFile = csv.reader(my_csv, delimiter=",")

        global dataInventoryList
        dataInventoryList = [[col[0], col[1], col[2], col[3], col[4], eval(col[5])] for col in myFile]


def dataWrite():
    with open("Inventory_List.csv", "w+") as my_csv:
        myFile = csv.writer(my_csv, delimiter=',', lineterminator='\n')
        myFile.writerows(dataInventoryList)

def main():
    while True:
        found = False
        dataRead()
        print("==========================================================================")
        print("Before update;")

        for i in range(len(dataInventoryList)):
            for j in range(6):
                print(str(dataInventoryList[i][j]) + "\t", end="")
            print("")

        search = input("Enter product code: ")
        quantity = int(input("Please enter quantity: "))
        choice = int(input("Add stocks[1] Pull Stacks[2]\nChoice: "))

        for i in range(len(dataInventoryList)):
            if search == dataInventoryList[i][0]:
                found = True
                if choice == 1:
                    dataInventoryList[i][5] += quantity
                    break
                elif choice == 2:
                    if dataInventoryList[i][5] == 0:
                        print("Requested order is out of stocks!\n")
                        break
                    elif quantity > dataInventoryList[i][5]:
                        print("Requested order is out of range!\n")
                        break
                    elif quantity <= dataInventoryList[i][5]:
                        dataInventoryList[i][5] -= quantity
                        break

        if found == False:
            print("Requested order was not found on the database!\n")

        elif found == True:
            dataWrite()

        print("After update;")
        for i in range(len(dataInventoryList)):
            for j in range(6):
                print(str(dataInventoryList[i][j]) + "\t", end="")
            print("")

main()

相关问题 更多 >