Python读取文件按字母排序输出时如何跳过首行内容
问题原因
当前代码会把文件所有读入的行全部纳入排序范围,没有排除包含Name、Price字段的表头行,因此不符合需求。
修改方案
方案1:固定跳过首行(适用于表头始终在文件第一行的场景)
读入所有行后,通过列表切片直接切掉第一个元素(即索引为0的表头行)即可,同时可以过滤掉文件中无意义的空行,避免输出多余空白:
fname = input('Enter the file name: ') try: fhand = open(fname) except: print('File cannot be opened:', fname) exit() print("") data = fhand.readlines() # 跳过第一行表头,过滤空行并去除每行首尾的换行、空格 data = [line.strip() for line in data[1:] if line.strip()] data.sort() for line in data: print(line)
方案2:动态识别表头行(适配你提供的测试文件,兼容性更好)
如果表头位置不固定,可以直接判断行内容是否包含Name、Price这类表头特征字段,命中则跳过,不加入排序池:
fname = input('Enter the file name: ') try: fhand = open(fname) except: print('File cannot be opened:', fname) exit() print("") data = [] for line in fhand: line_stripped = line.strip() # 跳过空行 if not line_stripped: continue # 识别到表头行直接跳过 if 'Name' in line_stripped and 'Price' in line_stripped: continue data.append(line_stripped) data.sort() for line in data: print(line)
注意:Python默认字符串排序规则为ASCII码排序,大写字母优先级高于小写字母,如果需要忽略大小写统一按字母顺序排序,可以将排序代码修改为data.sort(key=str.lower)。
运行效果
针对你提供的测试文件,运行修改后的代码会输出如下排序结果:
Flash, 300, 1, Figurine, Dc Hulk, 100, 1, Figurine, Marvel Obi Wan Kenobi, 400.99, 1, Figurine, Star Wars Spiderman, 30.50, 1, Comic, Marvel Superman, 150, 1, Figurine, DC Wolverine, 20, 2, Comic, Marvel
内容的提问来源于stack exchange,提问作者J_T
相关产品推荐
相关产品推荐

