鱼C论坛

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

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

[复制链接]
发表于 2021-12-2 20:44:38 | 显示全部楼层 |阅读模式
10鱼币
我选择“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[7]=t[7].strip('\n')
        card_dict={
            'num_str':t[0],
            'name_str':t[1],
            'class_str':t[2],
            'sex_str':t[3],
            'age_str':t[4],
            'phone_str':t[5],
            'qq_str':t[6],
            'addr_str':t[7]
        }
        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[i]["num_str"]+"\t")
        fw.write(card_list[i]["name_str"]+"\t")
        fw.write(card_list[i]["class_str"]+"\t")
        fw.write(card_list[i]["sex_str"]+"\t")
        fw.write(card_list[i]["age_str"]+"\t")
        fw.write(card_list[i]["phone_str"]+"\t")
        fw.write(card_list[i]["qq_str"]+"\t")
        fw.write(card_list[i]["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[i]['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[i]['num_str'],
                                                         card_list[i]['name_str'],
                                                         card_list[i]['class_str'],
                                                         card_list[i]['sex_str'],
                                                         card_list[i]['age_str'],
                                                         card_list[i]['phone_str'],
                                                         card_list[i]['qq_str'],
                                                         card_list[i]['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[i]['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[i]['num_str'],
                                                      card_list[i]['name_str'],
                                                      card_list[i]['class_str'],
                                                      card_list[i]['sex_str'],
                                                      card_list[i]['age_str'],
                                                      card_list[i]['phone_str'],
                                                      card_list[i]['qq_str'],
                                                      card_list[i]['addr_str']))

            card_list[i]['name_str'] = input_info(card_list[i]['name_str'],'姓名:')
            card_list[i]['class_str'] = input_info(card_list[i]['class_str'], '班级:')
            card_list[i]['sex_str'] = input_info(card_list[i]['sex_str'], '性别:')
            card_list[i]['age_str'] = input_info(card_list[i]['age_str'], '年龄:')
            card_list[i]['phone_str'] = input_info(card_list[i]['phone_str'], '电话:')
            card_list[i]['qq_str'] = input_info(card_list[i]['qq_str'], 'QQ:')
            card_list[i]['addr_str'] = input_info(card_list[i]['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[i]['num_str']:
            del card_list[i]
        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()
最佳答案
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[i]["num_str"]+"\t")
        fw.write(card_list[i]["name_str"]+"\t")
        fw.write(card_list[i]["class_str"]+"\t")
        fw.write(card_list[i]["sex_str"]+"\t")
        fw.write(card_list[i]["age_str"]+"\t")
        fw.write(card_list[i]["phone_str"]+"\t")
        fw.write(card_list[i]["qq_str"]+"\t")
        fw.write(card_list[i]["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, 2025-1-12 17:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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