如何在csv文件中查找元素并编辑文件

时间:2019-06-24 18:52:27

标签: python python-3.x csv

我正在尝试使用kivy创建一个程序,该程序接受输入,检查该值是否在CSV内,并根据该人的位置增加小时数。

现在我正试图找出如何检查输入是否在csv文件中,但我什么也没得到。

(我只需要逻辑/方法方面的帮助)

(我刚开始像一个月前那样开始编码,但之前有一点经验,所以我有点迷失了)

我尝试遍历行并遍历行中的每个字段以检查输入。我运行它,但是什么也没得到。请帮忙。预先感谢。

packages

csv文件

职位,姓名,学校,年级,电子邮件,电话号码,小时数

约翰·帕克高中副校长,11,burger@gmail.com,1234567890,0

csv文件应该随着该行中添加小时的变化而改变

1 个答案:

答案 0 :(得分:0)

如果您尝试通过搜索名称来编辑csv文件,则可以将标头用作值的占位符,这样就不必依赖位置了:

import csv

with open('test.csv', 'r') as fh:
    reader = csv.reader(fh)
    # get the headers out first, which is the first line
    headers = next(reader)

    for line in reader:
        # this will make a dictionary with the header values as
        # keys and the line entries as values
        # use l.strip to avoid the spaces following commas
        entry = dict(zip(headers, (l.strip() for l in line)))

        # use key access, it makes the code a bit more readable
        if entry['name'] == text_input.strip(): # strip leading and trailing whitespace
            print(line)

dict(zip(header, line))并不比仅使用line[0] == text_input快,但是如果您尝试操纵多个值,我认为显式性会更好一些。不过,这更是一种风格,可以根据您的用例进行辩论。

现在,更大的问题是您试图在具有只读访问权限的文件上调用fp.write

with open('file.txt') as fh:
    fh.write('a')

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
io.UnsupportedOperation: not writable

要解决此问题,您可以将新内容写入新文件,然后在完成后覆盖现有文件:

import os

with open('test.csv') as infile,
     open('new.csv', 'w') as outfile:
     for line in infile:
         # do things
         outfile.write(line)

# then when the method is complete
# move test.csv to new.csv, which overwrites the file
os.replace('new.csv', 'test.csv')