我一直在尝试在python中创建一个程序,您可以在CSV文件中访问,搜索和输入(追加)数据。我可以追加并打印文件,但是我在搜索外部文件时遇到问题。
这是我的代码到目前为止的样子:
def a():
# knows to use the file (getting something that's made)
import csv
myfile = open("student01.csv", "a")
student_num = input("Enter the student number: ")
name = input("Enter student's name: ")
tutor_group = input("Enter the tutor group: ")
gender = input("Enter M or F: ")
new_record =student_num+","+name+","+tutor_group+","+gender
myfile.write(str(new_record))
myfile.write("\n")
myfile.close()
def d():
# knows to use the file (getting something that's made)
import csv
myfile = open("student01.csv", "rb")
reader = csv.reader(myfile)
for row in myfile:
print(row)
myfile.close()
def menu():
print("Welcome to Student.csv\nWhat would you like to do?")
print()
print("1. Add to the file")
print("2. Display all the data from the file")
print("3. Search for particular data")
enter = input("Enter 1, 2 or 3: ")
enter = enter.upper()
if enter == "1":
a()
elif enter == "2":
d()
else:
s()
menu()
我只是不确定我的def s():
现在要做什么,以便我能够通过他们的姓名,号码或辅导组搜索文件中的学生。
有没有人有任何想法?
洛茨
答案 0 :(得分:1)
csv模块中有一个DictReader,非常适合您想做的事情(假设某些字段是唯一的,可能是student_num)
仅供参考我在您的代码中看到了一些问题
student_num+","+name+","+tutor_group+","+gender
应该删除,使用', '.join(your_iterable)
代替答案 1 :(得分:1)
import csv
def create_record(number_of_students):
while number_of_students:
student_num = raw_input("Enter the student number: ")
name = raw_input("Enter student's name: ")
tutor_group = raw_input("Enter the tutor group: ")
gender = raw_input("Enter M or F: ")
if student_num and name and tutor_group and gender:
record_list = [student_num, name, tutor_group, gender]
with open("student_record.csv", "ab") as wf:
writer = csv.writer(wf)
writer.writerow(record_list)
number_of_students -= 1
def display_record(option):
with open("student_record.csv", "r") as rf:
reader = csv.reader(rf)
if option == 2:
for row in reader:
print " ".join(row)
elif option == 3:
search_feild = raw_input("Search by student name, number, tutor_group, gender :")
for row in reader:
if search_feild in row:
print " ".join(row)
def main():
print("1. Add to the file")
print("2. Display all the data from the file")
print("3. Search for particular data")
print("0. To Exit")
choice = True
while choice:
your_choice = input("Enter your choice:")
if your_choice == 1:
number_of_students = input("Enter number of records you want to enter:")
create_record(number_of_students)
if your_choice == 2:
display_record(2)
if your_choice == 3:
display_record(3)
if your_choice == 0:
choice = False
if __name__ == "__main__":
main()
Output:
1. Add to the file
2. Display all the data from the file
3. Search for particular data
0. To Exit
Enter your choice:1
Enter number of records you want to enter:3
Enter the student number: 1
Enter student's name: Jhon
Enter the tutor group: Python
Enter M or F: M
Enter the student number: 2
Enter student's name: Lina
Enter the tutor group: Django
Enter M or F: F
Enter the student number: 3
Enter student's name: Max
Enter the tutor group: Python
Enter M or F: M
Enter your choice:2
1 Jhon Python M
2 Lina Django F
3 Max Python M
Enter your choice:3
Search by student name, number, tutor_group, gender :Python
1 Jhon Python M
3 Max Python M
Enter your choice:3
Search by student name, number, tutor_group, gender :F
2 Lina Django F
Enter your choice:0
您甚至应该使用 csv writer 方法在csv文件中编写数据。
搜索很容易,因为在阅读csv时,它会提供列表,我们可以使用 关键字搜索任何元素。
答案 2 :(得分:0)
搜索一组记录并不是一个小问题。我希望这不会让你变得非常复杂,但你需要做一些事情:
你可以在这里制作自己的东西:可以先将用户的输入编译成正则表达式,然后通过在条目和用户查询之间进行二进制比较来搜索CSV文件的子集(如名称列)。
你也可以制作一个索引:只需选择一种数据类型(或者当然是自己制作),并确保在合理的时间内检查自己的记录数量是否超级有效(低至a)时间复杂度尽可能)。
然后,很多人长期以来一直在研究这个问题,并且有很多代码可以帮助你。查看Information Retrieval并了解您正在查看的问题类型。
您可以使用类似Xapian的内容进行搜索,但有很多替代方法。