我正在尝试使用kivy创建一个程序,该程序接受输入,检查该值是否在CSV内,并根据该人的位置增加小时数。
现在我正试图找出如何检查输入是否在csv文件中,但我什么也没得到。
(我只需要逻辑/方法方面的帮助)
(我刚开始像一个月前那样开始编码,但之前有一点经验,所以我有点迷失了)
我尝试遍历行并遍历行中的每个字段以检查输入。我运行它,但是什么也没得到。请帮忙。预先感谢。
packages
csv文件
职位,姓名,学校,年级,电子邮件,电话号码,小时数
约翰·帕克高中副校长,11,burger@gmail.com,1234567890,0
csv文件应该随着该行中添加小时的变化而改变
答案 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')