柑橘栀子花~ 发表于 2025-4-30 15:18:55

文件处理

有一个文档里面是一个班级的学生姓名,还有一个文件夹里面有很多个文件以姓名命名,文件里面是学生的个人信息(班级年龄成绩等),现在想做一个表格,第一列为姓名,第二列为该学生的班级,应该怎么写

player-none 发表于 2025-4-30 15:18:56

柑橘栀子花~ 发表于 2025-4-30 19:24
报错了

import os
filename = input('储存学生姓名的文件名: [类似 aaa.txt] ')
with open(filename, encoding='utf-8') as f:
    names = f.read().splitlines()
dirpath = input('储存学生信息的文件夹路径: [类似 tmp/bbb] ')
data = []
for name in names:
    with open(os.path.join(dirpath, name + '.txt'), encoding='utf-8') as f:
      data.append((name, f.readlines().strip()))
outpath = input('输出路径: [类似 ccc.txt] ')
with open(outpath, 'w', encoding='utf-8') as f:
    f.write('姓名,班级\n')
    for name, Class in data:
      f.write(f'{name},{Class}\n')


若干错误已改正 感谢指出

FishC 发表于 2025-4-30 15:20:02

解决方案

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


import os
import csv

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

# 读取学生名单
with open(name_file, "r", encoding="utf-8") as f:
    students =

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

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 小助理,如未能正确解答您的问题,请继续追问。

player-none 发表于 2025-4-30 15:25:15

请详细说明文档和表格里的内容,最好能附上图片。

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

柑橘栀子花~ 发表于 2025-4-30 15:29:27

FishC 发表于 2025-4-30 15:20
解决方案

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


如果没有写着班级字段的行呢,只知道每个文件的第3行就是班级,需要读取每个文件第3行的数据

player-none 发表于 2025-4-30 15:30:48

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

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

还有一个文件夹里面有很多个文件以姓名命名,文件里面是学生的个人信息(班级年龄成绩等)
文件夹名?什么类型的文件?文件里面是怎么储存这些信息的?

请清楚地说明您的需求,我来为您解决这个问题。

柑橘栀子花~ 发表于 2025-4-30 15:48:32

player-none 发表于 2025-4-30 15:25
请详细说明文档和表格里的内容,最好能附上图片。

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

回复发不了图片,请看下最新的帖子

柑橘栀子花~ 发表于 2025-4-30 15:49:52

player-none 发表于 2025-4-30 15:30
这个文档是怎么储存的?Word吗?一行一个姓名还是怎样?有没有多余的字符?




清单文件是txt格式,文件夹里的我也不确定是什么格式

player-none 发表于 2025-4-30 15:51:11

柑橘栀子花~ 发表于 2025-4-30 15:48
回复发不了图片,请看下最新的帖子

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



文件夹里面的文件我默认是 txt 格式了,稍等我下,我写代码去

柑橘栀子花~ 发表于 2025-4-30 15:54:00

player-none 发表于 2025-4-30 15:51
回复其实是可以发的,点那边的“高级模式”就行




可以当作txt格式,文件是可以用记事本打开的,感谢

player-none 发表于 2025-4-30 16:00:56

柑橘栀子花~ 发表于 2025-4-30 15:54
可以当作txt格式,文件是可以用记事本打开的,感谢

import os
filename = input('储存学生姓名的文件名: [类似 aaa.txt] ')
with open(filename, encoding='utf-8') as f:
    names = f.read().splitlines()
dirpath = input('储存学生信息的文件夹路径: [类似 tmp/bbb] ')
data = []
for name in names:
    with open(os.path.join(dirpath, name + '.txt'), encoding='utf-8') as f:
      data.append((name, f.readlines().strip()))
outpath = input('CSV 路径: [类似 ccc.csv] ')
with open(output, 'w', encoding='utf-8') as f:
    f.write('姓名,班级')
    for name, Class in data:
      f.write(f'{name},{Class}')


要Excel的话用Excel手动转:

柑橘栀子花~ 发表于 2025-4-30 19:24:24

player-none 发表于 2025-4-30 16:00
要Excel的话用Excel手动转:

报错了

柑橘栀子花~ 发表于 2025-4-30 19:25:13

player-none 发表于 2025-4-30 16:00
要Excel的话用Excel手动转:

是否可以改为输出格式也是txt

柑橘栀子花~ 发表于 2025-4-30 20:27:33

player-none 发表于 2025-4-30 15:18
若干错误已改正 感谢指出

如果读取的文件没有后缀名的,应该怎么读取呢

player-none 发表于 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:

柑橘栀子花~ 发表于 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:
这一行改成(记得保留缩进 ...

谢谢!

柑橘栀子花~ 发表于 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: No such file or directory: 'ccc\\'
为什么呢

player-none 发表于 2025-5-13 17:12:29

柑橘栀子花~ 发表于 2025-5-13 15:46
发现一个BUG,只要文件有十几个以上就会报错FileNotFoundError: No such file or directory: ' ...

这是找不到 ccc 目录了,跟文件数量无关
页: [1]
查看完整版本: 文件处理