鱼C论坛

 找回密码
 立即注册
查看: 892|回复: 9

[已解决]为什么我的文件读取不到呢

[复制链接]
发表于 2021-12-2 20:44:38 | 显示全部楼层 |阅读模式
10鱼币
我选择“1”浏览信息的时候没有我建的txt文件内容,我是建在跟py文件同一个目录的。或者是我的主函数写错了??

  1. import re
  2. import os
  3. filename="student.txt"
  4. card_list = []
  5. headline=[]
  6. def load_info():
  7.     """从文件导入学生信息"""
  8.     fr=open("student.txt",'r')
  9.     head=fr.readline()
  10.     headline.append(head)
  11.     fr.seek(0,0)
  12.     lines=fr.readlines()
  13.     flied=lines.pop(0).split(',')
  14.     for eachline in lines:
  15.         t=eachline.split('\t')
  16.         t[7]=t[7].strip('\n')
  17.         card_dict={
  18.             'num_str':t[0],
  19.             'name_str':t[1],
  20.             'class_str':t[2],
  21.             'sex_str':t[3],
  22.             'age_str':t[4],
  23.             'phone_str':t[5],
  24.             'qq_str':t[6],
  25.             'addr_str':t[7]
  26.         }
  27.         card_list.append(card_dict)
  28.         print('学生信息导入成功!')
  29.         fr.close()

  30. def save_info():
  31.     fw=open("student.tex",'w')
  32.     fw.write(" ",join(headline))
  33.     for i in range(len(card_list)):
  34.         fw.write(card_list[i]["num_str"]+"\t")
  35.         fw.write(card_list[i]["name_str"]+"\t")
  36.         fw.write(card_list[i]["class_str"]+"\t")
  37.         fw.write(card_list[i]["sex_str"]+"\t")
  38.         fw.write(card_list[i]["age_str"]+"\t")
  39.         fw.write(card_list[i]["phone_str"]+"\t")
  40.         fw.write(card_list[i]["qq_str"]+"\t")
  41.         fw.write(card_list[i]["addr_str"]+"\n")
  42.         print('学生信息保存成功!')
  43.         fw.close()

  44. def show_menu():
  45.     """显示菜单"""
  46.     print()
  47.     print('*'*70)
  48.     print('欢迎使用【学生信息管理系统】')
  49.     print()
  50.     print('1.浏览全部')
  51.     print('2.新增学生')
  52.     print('3.搜索学生')
  53.     print('4.修改学生')
  54.     print('5.删除学生')
  55.     print('6.保存信息')
  56.     print('0.退出系统')
  57.     print('*'*70)
  58.     print()

  59. def new_student():
  60.     """新增学生"""
  61.     print('-'*70)
  62.     print('新增学生')
  63.     num_str=input('请输入学号:')
  64.     name_str=input('请输入姓名:')
  65.     class_str=input('请输入班级:')
  66.     sex_str=input('请输入性别:')
  67.     age_str=input('请输入年龄:')
  68.     phone_str=input('请输入电话:')
  69.     qq_str=input('请输入QQ:')
  70.     addr_str=input('请输入地址:')

  71.     card_dict={   'num_str':num_str,
  72.                   'name_str':name_str,
  73.                   'class_str':class_str,
  74.                   'sex_str':sex_str,
  75.                   'age_str':age_str,
  76.                   'phone_str':phone_str,
  77.                   'qq_str':qq_str,
  78.                   'addr_str':addr_str }
  79.     card_list.append(card_dict)
  80.     print('添加%s的信息成功'%name_str)

  81. def show_all():
  82.     """显示所有学生信息"""
  83.     print('-'*70)
  84.     print('显示所有学生信息')
  85.     if len(card_list) == 0:
  86.         print('当前没有任何学生记录,请使用新增功能添加学生信息')
  87.         return
  88.     for name in ["学号","姓名","班级","年龄","电话","QQ","地址"]:
  89.         print(name,"\t",end=" ")
  90.         print(' ')
  91.         print('-'*70)
  92.         #遍历学生信息列表依次输出字典信息
  93.     for card_dict in card_list:
  94.         print('%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s'% (card_dict['num_str'],
  95.                                              card_dict['name_str'],
  96.                                              card_dict['class_str'],
  97.                                              card_dict['sex_str'],
  98.                                              card_dict['age_str'],
  99.                                              card_dict['phone_str'],
  100.                                              card_dict['qq_str'],
  101.                                              card_dict['addr_str']))

  102. def search_student():
  103.     """搜索学生信息"""
  104.     print('-'*70)
  105.     print('搜索学生信息')
  106.     find_name = input('请输入搜索的姓名:')
  107.     for i in range(len(card_list)):
  108.          if find_name == card_list[i]['name_str']:
  109.                print ("学号\t姓名\t班级\t性别\t年龄\t电话\tQQ\t地址")
  110.                print('='*70)
  111.                print('%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s' % (card_list[i]['num_str'],
  112.                                                          card_list[i]['name_str'],
  113.                                                          card_list[i]['class_str'],
  114.                                                          card_list[i]['sex_str'],
  115.                                                          card_list[i]['age_str'],
  116.                                                          card_list[i]['phone_str'],
  117.                                                          card_list[i]['qq_str'],
  118.                                                          card_list[i]['addr_str']))
  119.                break
  120.     else:
  121.         print('抱歉,没有找到%s'%find_name)

  122. def update_student():
  123.     """修改学生信息"""
  124.     find_num = input('请输入待修改学生学号:')
  125.     for i in range(len(card_list)):
  126.         if find_num == card_list[i]['num_str']:
  127.             print("学号\t姓名\t班级\t性别\t年龄\t电话\tQQ\t地址")
  128.             print('%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n'%(card_list[i]['num_str'],
  129.                                                       card_list[i]['name_str'],
  130.                                                       card_list[i]['class_str'],
  131.                                                       card_list[i]['sex_str'],
  132.                                                       card_list[i]['age_str'],
  133.                                                       card_list[i]['phone_str'],
  134.                                                       card_list[i]['qq_str'],
  135.                                                       card_list[i]['addr_str']))

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

  147. def input_info(dict_value,tip_message):
  148.     """

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

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

  165.         #以下为主程序


  166.         load_info()
  167. def main():
  168.         print("学生信息已导入!")
  169.         while True:
  170.             show_menu()
  171.             action_str = input("请选择希望执行的操作:")
  172.             print("你选择的操作是%s"%action_str)
  173.             if action_str in ["1","2","3","4","5","6"]:
  174.                 if action_str == "1":
  175.                     show_all()
  176.                 elif action_str == "2":
  177.                     new_student()
  178.                 elif action_str == "3":
  179.                     search_student()
  180.                 elif action_str == "4":
  181.                     update_student()
  182.                 elif action_str == "5":
  183.                     delete_student()
  184.                 elif action_str == "6":
  185.                     save_info()
  186.             elif action_str == "0":
  187.                 print("欢迎再次使用【学生信息管理系统】:")
  188.                 break
  189.             else:
  190.                 print("输入错误,请重新输入:")
  191. if __name__ == '__main__':
  192.     main()



复制代码
最佳答案
2021-12-2 20:44:39
输入1的进入show_all()函数,但这个函数没有打开文件。如果是初次运行,字典里也没有数据,自然就是空。
代码里有着几处错处,你自己检查检查吧。
2021-12-02 21_58_32-fishc – info_test_1.py Administrator.png

最佳答案

查看完整内容

输入1的进入show_all()函数,但这个函数没有打开文件。如果是初次运行,字典里也没有数据,自然就是空。 代码里有着几处错处,你自己检查检查吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-2 20:44:39 | 显示全部楼层    本楼为最佳答案   
输入1的进入show_all()函数,但这个函数没有打开文件。如果是初次运行,字典里也没有数据,自然就是空。
代码里有着几处错处,你自己检查检查吧。
2021-12-02 21_58_32-fishc – info_test_1.py Administrator.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-2 22:11:47 From FishC Mobile | 显示全部楼层
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 下面的代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-3 16:41:54 | 显示全部楼层
card_list 是空列表, 每次执行程序前已经被初始化 show_all()函数获取的是这个列表的值  并不是文件的内容
save_info()函数 join方法前面应该是点 不是逗号 导致报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-3 21:27:37 | 显示全部楼层
君无泪 发表于 2021-12-2 22:11
def show_all():
  """显示所有学生信息"""
  print('-'*70)

那怎么才会执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-3 21:36:54 | 显示全部楼层
君无泪 发表于 2021-12-2 22:11
def show_all():
  """显示所有学生信息"""
  print('-'*70)

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

发现了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-3 22:06:48 From FishC Mobile | 显示全部楼层
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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我就是用pycharm写的,我现在才发现那个错误,已经狠狠抽自己两巴掌了,谢谢靓仔
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 19:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表