无法生成新文件拆分值,输出文件数值异常(年份后为0)求助
先明确你遇到的具体问题:
我无法在新文件中生成拆分值,生成的文件显示年份后均为0,例如“1985 0 0 0”、“1986 0 0 0”等,未能从给定的输入文件中读取真实数值。我的.txt文件包含5类特定值:文件名、年份、平均最高值、平均最低值、平均降水量。YearlyAvarage.txt中的数据如下:
USC00339312.txt 1985 14.11 3.96 100.67 USC00339312.txt 1986 15.09 5.13 94.76 USC00339312.txt 1987 15.66 5.28 81.15 USC00339312.txt 1988 15.22 3.66 89.82 USC00339312.txt 1989 14.48 ...
结合你的数据格式,我帮你梳理几个最可能的问题点和解决办法:
1. 数据分组读取逻辑出错
你的数据是每5个字段为一组(文件名+年份+3个数值),但如果代码没按这个分组规则处理,就会取错数值位置,甚至读到空值/错误值,最终写入0。
举个Python代码的错误示例:
# 错误:没有按5步长分组遍历 with open('YearlyAvarage.txt', 'r') as f: data_list = f.read().split() for idx in range(len(data_list)): year = data_list[idx+1] # 这里idx逐次+1,会导致后续取值完全错位 avg_high = data_list[idx+2]
正确的写法应该是按5步长循环,确保每次取到一组完整的数据:
with open('YearlyAvarage.txt', 'r') as in_file: all_data = in_file.read().split() # 从索引0开始,每5个元素为一组处理 for idx in range(0, len(all_data), 5): filename = all_data[idx] year = all_data[idx+1] # 记得把字符串转换成数值类型 avg_high = float(all_data[idx+2]) avg_low = float(all_data[idx+3]) avg_precip = float(all_data[idx+4]) # 写入新文件 with open('output.txt', 'a') as out_file: out_file.write(f"{year} {avg_high} {avg_low} {avg_precip}\n")
2. 写入时误用固定值0
检查你的写入代码,是不是不小心写死了输出内容?比如如果代码里写了:
out_file.write(f"{year} 0 0 0\n")
那无论读取到什么数值,都会输出0。一定要确保写入的是你读取到的变量(比如avg_high、avg_low这些),而不是固定的0。
3. 数据类型转换遗漏
如果读取到的数值还是字符串类型,有没有可能在后续处理中被错误覆盖成0?或者转换时出错(比如有隐藏的空格/特殊字符)?不过看你的示例数据是标准的浮点数,大概率是转换步骤没做好。记得在读取后把字符串转成float类型,避免后续处理出问题。
4. 文件读取方式不匹配
如果你的代码是逐行读取,但原文件的所有数据都在同一行里,那逐行处理的话会把整行内容当成一组数据,自然无法正确拆分。这种情况下,应该一次性读取全部内容,再按空格拆分后分组处理,就像上面正确代码里那样。
调试小技巧
建议在代码里加一行调试输出,看看读取到的数值是否正确:
print(f"读取到:年份{year},最高温{avg_high},最低温{avg_low},降水量{avg_precip}")
运行后看控制台输出,如果这里的数值是对的,那就是写入环节的问题;如果这里就是0或者错误值,那就是读取分组的问题。
内容的提问来源于stack exchange,提问作者Mayur Potdar

