鱼C论坛

 找回密码
 立即注册
查看: 337|回复: 17

[已解决]文件处理

[复制链接]
发表于 2025-4-30 15:18:55 | 显示全部楼层 |阅读模式
60鱼币
有一个文档里面是一个班级的学生姓名,还有一个文件夹里面有很多个文件以姓名命名,文件里面是学生的个人信息(班级年龄成绩等),现在想做一个表格,第一列为姓名,第二列为该学生的班级,应该怎么写
最佳答案
2025-4-30 15:18:56
  1. import os
  2. filename = input('储存学生姓名的文件名: [类似 aaa.txt] ')
  3. with open(filename, encoding='utf-8') as f:
  4.     names = f.read().splitlines()
  5. dirpath = input('储存学生信息的文件夹路径: [类似 tmp/bbb] ')
  6. data = []
  7. for name in names:
  8.     with open(os.path.join(dirpath, name + '.txt'), encoding='utf-8') as f:
  9.         data.append((name, f.readlines()[2].strip()))
  10. outpath = input('输出路径: [类似 ccc.txt] ')
  11. with open(outpath, 'w', encoding='utf-8') as f:
  12.     f.write('姓名,班级\n')
  13.     for name, Class in data:
  14.         f.write(f'{name},{Class}\n')
复制代码


若干错误已改正 感谢指出

最佳答案

查看完整内容

若干错误已改正 感谢指出
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-30 15:18:56 | 显示全部楼层    本楼为最佳答案   
  1. import os
  2. filename = input('储存学生姓名的文件名: [类似 aaa.txt] ')
  3. with open(filename, encoding='utf-8') as f:
  4.     names = f.read().splitlines()
  5. dirpath = input('储存学生信息的文件夹路径: [类似 tmp/bbb] ')
  6. data = []
  7. for name in names:
  8.     with open(os.path.join(dirpath, name + '.txt'), encoding='utf-8') as f:
  9.         data.append((name, f.readlines()[2].strip()))
  10. outpath = input('输出路径: [类似 ccc.txt] ')
  11. with open(outpath, 'w', encoding='utf-8') as f:
  12.     f.write('姓名,班级\n')
  13.     for name, Class in data:
  14.         f.write(f'{name},{Class}\n')
复制代码


若干错误已改正 感谢指出
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-30 15:20:02 | 显示全部楼层
解决方案

推荐使用Python脚本实现,以下是具体步骤和代码:


  1. import os
  2. import csv

  3. # 配置路径(根据实际情况修改)
  4. name_file = "names.txt"    # 学生名单文件路径
  5. data_dir = "student_files" # 学生信息文件夹路径
  6. output_file = "result.csv" # 输出表格路径

  7. # 读取学生名单
  8. with open(name_file, "r", encoding="utf-8") as f:
  9.     students = [line.strip() for line in f]

  10. # 创建结果表格
  11. with open(output_file, "w", newline="", encoding="utf-8") as csvfile:
  12.     writer = csv.writer(csvfile)
  13.     writer.writerow(["姓名", "班级"])  # 写入表头
  14.    
  15.     for name in students:
  16.         file_path = os.path.join(data_dir, f"{name}.txt")
  17.         class_info = "未找到"
  18.         
  19.         try:
  20.             with open(file_path, "r", encoding="utf-8") as f:
  21.                 # 查找包含"班级"字段的行(根据实际格式调整)
  22.                 for line in f:
  23.                     if "班级:" in line:  # 假设格式为"班级:xxx"
  24.                         class_info = line.split(":")[1].strip()
  25.                         break
  26.         except FileNotFoundError:
  27.             class_info = "文件不存在"
  28.         
  29.         writer.writerow([name, class_info])

  30. print(f"表格已生成:{output_file}")
复制代码


使用说明

1. 将学生姓名按行保存在 names.txt
2. 确保学生信息文件存放在 student_files 文件夹
3. 每个学生信息文件命名格式为 姓名.txt
4. 学生信息文件中需要包含 班级:班级名称 格式的行

  • 如果学生信息文件使用其他编码(如GBK),修改脚本中的 encoding="utf-8"
  • 如果班级信息字段格式不同(如"class:xxx"),修改第23行的匹配条件
  • 最终生成的 result.csv 可用Excel直接打开


如果遇到找不到文件或匹配不到班级信息的情况,表格中会标注 文件不存在未找到,请注意检查对应文件。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-30 15:25:15 | 显示全部楼层
请详细说明文档和表格里的内容,最好能附上图片。

或者说明以什么格式储存,不一定真实姓名
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-4-30 15:29:27 | 显示全部楼层
FishC 发表于 2025-4-30 15:20
解决方案

推荐使用Python脚本实现,以下是具体步骤和代码:

如果没有写着班级字段的行呢,只知道每个文件的第3行就是班级,需要读取每个文件第3行的数据
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-30 15:30:48 | 显示全部楼层
柑橘栀子花~ 发表于 2025-4-30 15:29
如果没有写着班级字段的行呢,只知道每个文件的第3行就是班级,需要读取每个文件第3行的数据

有一个文档里面是一个班级的学生姓名

这个文档是怎么储存的?Word吗?一行一个姓名还是怎样?有没有多余的字符?

还有一个文件夹里面有很多个文件以姓名命名,文件里面是学生的个人信息(班级年龄成绩等)

文件夹名?什么类型的文件?文件里面是怎么储存这些信息的?

请清楚地说明您的需求,我来为您解决这个问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-4-30 15:48:32 | 显示全部楼层
player-none 发表于 2025-4-30 15:25
请详细说明文档和表格里的内容,最好能附上图片。

或者说明以什么格式储存,不一定真实姓名

回复发不了图片,请看下最新的帖子
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-4-30 15:49:52 | 显示全部楼层
player-none 发表于 2025-4-30 15:30
这个文档是怎么储存的?Word吗?一行一个姓名还是怎样?有没有多余的字符?

清单文件是txt格式,文件夹里的我也不确定是什么格式
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-30 15:51:11 | 显示全部楼层
柑橘栀子花~ 发表于 2025-4-30 15:48
回复发不了图片,请看下最新的帖子

回复其实是可以发的,点那边的“高级模式”就行

Image1.png

文件夹里面的文件我默认是 txt 格式了,稍等我下,我写代码去
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-4-30 15:54:00 | 显示全部楼层
player-none 发表于 2025-4-30 15:51
回复其实是可以发的,点那边的“高级模式”就行

可以当作txt格式,文件是可以用记事本打开的,感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-30 16:00:56 | 显示全部楼层
柑橘栀子花~ 发表于 2025-4-30 15:54
可以当作txt格式,文件是可以用记事本打开的,感谢
  1. import os
  2. filename = input('储存学生姓名的文件名: [类似 aaa.txt] ')
  3. with open(filename, encoding='utf-8') as f:
  4.     names = f.read().splitlines()
  5. dirpath = input('储存学生信息的文件夹路径: [类似 tmp/bbb] ')
  6. data = []
  7. for name in names:
  8.     with open(os.path.join(dirpath, name + '.txt'), encoding='utf-8') as f:
  9.         data.append((name, f.readlines()[2].strip()))
  10. outpath = input('CSV 路径: [类似 ccc.csv] ')
  11. with open(output, 'w', encoding='utf-8') as f:
  12.     f.write('姓名,班级')
  13.     for name, Class in data:
  14.         f.write(f'{name},{Class}')
复制代码


要Excel的话用Excel手动转:

Snipaste_2025-04-30_16-00-30.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-4-30 19:24:24 | 显示全部楼层
player-none 发表于 2025-4-30 16:00
要Excel的话用Excel手动转:

报错了
a.png
d.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-4-30 19:25:13 | 显示全部楼层
player-none 发表于 2025-4-30 16:00
要Excel的话用Excel手动转:

是否可以改为输出格式也是txt
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-4-30 20:27:33 | 显示全部楼层
player-none 发表于 2025-4-30 15:18
若干错误已改正 感谢指出

如果读取的文件没有后缀名的,应该怎么读取呢
11.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-30 20:28:41 | 显示全部楼层
柑橘栀子花~ 发表于 2025-4-30 20:27
如果读取的文件没有后缀名的,应该怎么读取呢

with open(os.path.join(dirpath, name + '.txt'), encoding='utf-8') as f:
这一行改成(记得保留缩进,我懒得打了)
with open(os.path.join(dirpath, name), encoding='utf-8') as f:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-4-30 20:40:56 | 显示全部楼层
player-none 发表于 2025-4-30 20:28
with open(os.path.join(dirpath, name + '.txt'), encoding='utf-8') as f:
这一行改成(记得保留缩进 ...

谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-5-13 15:46:29 | 显示全部楼层
player-none 发表于 2025-4-30 20:28
with open(os.path.join(dirpath, name + '.txt'), encoding='utf-8') as f:
这一行改成(记得保留缩进 ...

发现一个BUG,只要文件有十几个以上就会报错FileNotFoundError: [Errno 2] No such file or directory: 'ccc\\'
为什么呢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-5-13 17:12:29 | 显示全部楼层
柑橘栀子花~ 发表于 2025-5-13 15:46
发现一个BUG,只要文件有十几个以上就会报错FileNotFoundError: [Errno 2] No such file or directory: ' ...

这是找不到 ccc 目录了,跟文件数量无关
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-26 00:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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