Gacy 发表于 2021-12-2 20:44:38

为什么我的文件读取不到呢

我选择“1”浏览信息的时候没有我建的txt文件内容,我是建在跟py文件同一个目录的。或者是我的主函数写错了??

import re
import os
filename="student.txt"
card_list = []
headline=[]
def load_info():
    """从文件导入学生信息"""
    fr=open("student.txt",'r')
    head=fr.readline()
    headline.append(head)
    fr.seek(0,0)
    lines=fr.readlines()
    flied=lines.pop(0).split(',')
    for eachline in lines:
      t=eachline.split('\t')
      t=t.strip('\n')
      card_dict={
            'num_str':t,
            'name_str':t,
            'class_str':t,
            'sex_str':t,
            'age_str':t,
            'phone_str':t,
            'qq_str':t,
            'addr_str':t
      }
      card_list.append(card_dict)
      print('学生信息导入成功!')
      fr.close()

def save_info():
    fw=open("student.tex",'w')
    fw.write(" ",join(headline))
    for i in range(len(card_list)):
      fw.write(card_list["num_str"]+"\t")
      fw.write(card_list["name_str"]+"\t")
      fw.write(card_list["class_str"]+"\t")
      fw.write(card_list["sex_str"]+"\t")
      fw.write(card_list["age_str"]+"\t")
      fw.write(card_list["phone_str"]+"\t")
      fw.write(card_list["qq_str"]+"\t")
      fw.write(card_list["addr_str"]+"\n")
      print('学生信息保存成功!')
      fw.close()

def show_menu():
    """显示菜单"""
    print()
    print('*'*70)
    print('欢迎使用【学生信息管理系统】')
    print()
    print('1.浏览全部')
    print('2.新增学生')
    print('3.搜索学生')
    print('4.修改学生')
    print('5.删除学生')
    print('6.保存信息')
    print('0.退出系统')
    print('*'*70)
    print()

def new_student():
    """新增学生"""
    print('-'*70)
    print('新增学生')
    num_str=input('请输入学号:')
    name_str=input('请输入姓名:')
    class_str=input('请输入班级:')
    sex_str=input('请输入性别:')
    age_str=input('请输入年龄:')
    phone_str=input('请输入电话:')
    qq_str=input('请输入QQ:')
    addr_str=input('请输入地址:')

    card_dict={   'num_str':num_str,
                  'name_str':name_str,
                  'class_str':class_str,
                  'sex_str':sex_str,
                  'age_str':age_str,
                  'phone_str':phone_str,
                  'qq_str':qq_str,
                  'addr_str':addr_str }
    card_list.append(card_dict)
    print('添加%s的信息成功'%name_str)

def show_all():
    """显示所有学生信息"""
    print('-'*70)
    print('显示所有学生信息')
    if len(card_list) == 0:
      print('当前没有任何学生记录,请使用新增功能添加学生信息')
      return
    for name in ["学号","姓名","班级","年龄","电话","QQ","地址"]:
      print(name,"\t",end=" ")
      print(' ')
      print('-'*70)
      #遍历学生信息列表依次输出字典信息
    for card_dict in card_list:
      print('%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s'% (card_dict['num_str'],
                                             card_dict['name_str'],
                                             card_dict['class_str'],
                                             card_dict['sex_str'],
                                             card_dict['age_str'],
                                             card_dict['phone_str'],
                                             card_dict['qq_str'],
                                             card_dict['addr_str']))

def search_student():
    """搜索学生信息"""
    print('-'*70)
    print('搜索学生信息')
    find_name = input('请输入搜索的姓名:')
    for i in range(len(card_list)):
         if find_name == card_list['name_str']:
               print ("学号\t姓名\t班级\t性别\t年龄\t电话\tQQ\t地址")
               print('='*70)
               print('%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s' % (card_list['num_str'],
                                                         card_list['name_str'],
                                                         card_list['class_str'],
                                                         card_list['sex_str'],
                                                         card_list['age_str'],
                                                         card_list['phone_str'],
                                                         card_list['qq_str'],
                                                         card_list['addr_str']))
               break
    else:
      print('抱歉,没有找到%s'%find_name)

def update_student():
    """修改学生信息"""
    find_num = input('请输入待修改学生学号:')
    for i in range(len(card_list)):
      if find_num == card_list['num_str']:
            print("学号\t姓名\t班级\t性别\t年龄\t电话\tQQ\t地址")
            print('%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n'%(card_list['num_str'],
                                                      card_list['name_str'],
                                                      card_list['class_str'],
                                                      card_list['sex_str'],
                                                      card_list['age_str'],
                                                      card_list['phone_str'],
                                                      card_list['qq_str'],
                                                      card_list['addr_str']))

            card_list['name_str'] = input_info(card_list['name_str'],'姓名:')
            card_list['class_str'] = input_info(card_list['class_str'], '班级:')
            card_list['sex_str'] = input_info(card_list['sex_str'], '性别:')
            card_list['age_str'] = input_info(card_list['age_str'], '年龄:')
            card_list['phone_str'] = input_info(card_list['phone_str'], '电话:')
            card_list['qq_str'] = input_info(card_list['qq_str'], 'QQ:')
            card_list['addr_str'] = input_info(card_list['addr_str'], '地址:')
            print('修改学生信息成功!!!')
            break
    else:
      print('抱歉,没有找到学号为%s的学生'%find_num)

def input_info(dict_value,tip_message):
    """

    :param dict_value: 字典中原有的值
    :param tip_message: 输入的提示文字
    :return: 如果用户输入了内容,就返回内容,负责返回字典中原有的值
    """
    result_str = input(tip_message)
    if len(result_str)>0:
            return result_str
    else:
      return dict_value

def delete_student():
    """删除学生信息"""
    find_num = input('请输入待删除学生学号:')
    for i in range(len(card_list)):
      if find_num == card_list['num_str']:
            del card_list
      print('删除学生信息成功!!')

      #以下为主程序


      load_info()
def main():
      print("学生信息已导入!")
      while True:
            show_menu()
            action_str = input("请选择希望执行的操作:")
            print("你选择的操作是%s"%action_str)
            if action_str in ["1","2","3","4","5","6"]:
                if action_str == "1":
                  show_all()
                elif action_str == "2":
                  new_student()
                elif action_str == "3":
                  search_student()
                elif action_str == "4":
                  update_student()
                elif action_str == "5":
                  delete_student()
                elif action_str == "6":
                  save_info()
            elif action_str == "0":
                print("欢迎再次使用【学生信息管理系统】:")
                break
            else:
                print("输入错误,请重新输入:")
if __name__ == '__main__':
    main()



suchocolate 发表于 2021-12-2 20:44:39

输入1的进入show_all()函数,但这个函数没有打开文件。如果是初次运行,字典里也没有数据,自然就是空。
代码里有着几处错处,你自己检查检查吧。

君无泪 发表于 2021-12-2 22:11:47

def show_all():
"""显示所有学生信息"""
print('-'*70)
print('显示所有学生信息')
if len(card_list) == 0:
print('当前没有任何学生记录,请使用新增功能添加学生信息')
return# 看这里!python不会执行return下面的代码。
for name in ["学号","姓名","班级","年龄","电话","QQ","地址"]:
print(name,"\t",end=" ")
print(' ')
print('-'*70)
#遍历学生信息列表依次输出字典信息
for card_dict in card_list:
print('%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s'% (card_dict['num_str'],
               card_dict['name_str'],
               card_dict['class_str'],
               card_dict['sex_str'],
               card_dict['age_str'],
               card_dict['phone_str'],
               card_dict['qq_str'],
               card_dict['addr_str']))

# python 不会执行 return 下面的代码。

C201818z 发表于 2021-12-3 16:41:54

card_list 是空列表, 每次执行程序前已经被初始化 show_all()函数获取的是这个列表的值并不是文件的内容
save_info()函数 join方法前面应该是点 不是逗号 导致报错

Gacy 发表于 2021-12-3 21:27:37

君无泪 发表于 2021-12-2 22:11
def show_all():
"""显示所有学生信息"""
print('-'*70)


那怎么才会执行

Gacy 发表于 2021-12-3 21:36:54

君无泪 发表于 2021-12-2 22:11
def show_all():
"""显示所有学生信息"""
print('-'*70)


谢谢{:10_254:}

Gacy 发表于 2021-12-3 21:37:25

C201818z 发表于 2021-12-3 16:41
card_list 是空列表, 每次执行程序前已经被初始化 show_all()函数获取的是这个列表的值并不是文件的内容 ...

谢谢

Gacy 发表于 2021-12-3 21:37:57

suchocolate 发表于 2021-12-2 20:44
输入1的进入show_all()函数,但这个函数没有打开文件。如果是初次运行,字典里也没有数据,自然就是空。
...

发现了,谢谢

君无泪 发表于 2021-12-3 22:06:48

Gacy 发表于 2021-12-3 21:36
谢谢

# 问题解决了吗?建议你下载个pycharm 写代码时容易发现错误。
def save_info():
    fw=open("student.tex",'w')# 这里是 .txt 的,你写成 .tex 了。
    fw.write(" ",join(headline))
    for i in range(len(card_list)):
      fw.write(card_list["num_str"]+"\t")
      fw.write(card_list["name_str"]+"\t")
      fw.write(card_list["class_str"]+"\t")
      fw.write(card_list["sex_str"]+"\t")
      fw.write(card_list["age_str"]+"\t")
      fw.write(card_list["phone_str"]+"\t")
      fw.write(card_list["qq_str"]+"\t")
      fw.write(card_list["addr_str"]+"\n")
      print('学生信息保存成功!')
      fw.close()

Gacy 发表于 2021-12-3 22:32:10

君无泪 发表于 2021-12-3 22:06
# 问题解决了吗?建议你下载个pycharm 写代码时容易发现错误。
def save_info():
    fw=open("student ...

我就是用pycharm写的{:10_266:},我现在才发现那个错误,已经狠狠抽自己两巴掌了,谢谢靓仔{:10_254:}
页: [1]
查看完整版本: 为什么我的文件读取不到呢