【发布时间】:2014-06-18 14:55:38
【问题描述】:
我有以空格分隔的文件,其中包含不同 LAT/LON 位置的台站的每日降水值。以日常文件为例,格式如下:
经纬度PRCP
22.0 110.4 1.2
23.0 121.0 0.0
23.0 122.0 0.1
第一个字段等于纬度,第二个字段等于经度,第三个字段等于每日总降水量。
我希望创建一个每周文件,使用相同的格式从该周的每个每日文件中编译总计...但我遇到了问题。对我来说这可能更棘手的是,每个每日文件可能没有所有位置,这意味着行数可能不同,我不能简单地将每个文件行中的 TOTAL PRCP 字段逐行添加到每周文件中,因为它可能不会一整天都匹配。
我目前的方法是打开每个文件,遍历每一行,并将每个字段设置为一个变量,然后与第二个每日文件的变量进行比较,如果 LAT 和 LON,则将两个降水值的总和写入一行字段匹配...然后每天与第二天执行此操作并编写一个“sum”文件。
with open(sundayFile, "r") as sundayFile:
with open(mondayFile, "r") as mondayFile:
with open(addMex1, "a") as addFile:
print "\n\nNow checking Sunday File: " + str(sundayFile) + " and Monday File: " + str(mondayFile) + "\n\n"
for lineA in sundayFile:
parsedLineA = lineA.split()
LAT_A = parsedLineA[0]
LON_A = parsedLineA[1]
TOTAL_PRCP_A = parsedLineA[2]
print "Line in Sunday File: " + LAT_A + "," + LON_A + "," + TOTAL_PRCP_A + "\n"
for lineB in mondayFile:
parsedLineB = lineB.split()
LAT_B = parsedLineB[0]
LON_B = parsedLineB[1]
TOTAL_PRCP_B = parsedLineB[2]
print "Line in Monday File: " + LAT_B + "," + LON_B + "," + TOTAL_PRCP_B + "\n"
if LAT_A == LAT_B and LON_A == LON_B:
print "\n***** Found a match for station at longitude of " + LON_A + " and latitude of " + LAT_A + "\n"
LAT = LAT_A
LON = LON_A
TOTAL_PRCP = str(float(TOTAL_PRCP_A) + float(TOTAL_PRCP_B))
addFile.write(LAT + "," + LON + "," + TOTAL_PRCP + "\n")
else:
addFile.write(LAT_A + "," + LON_A + "," + TOTAL_PRCP_A + "\n")
addFile.write(LAT_B + "," + LON_B + "," + TOTAL_PRCP_B + "\n")
这并没有真正起作用,我终于放弃了手动尝试……必须有一个 Pythonic,优雅的方式来执行此操作。非常感谢任何帮助!
【问题讨论】:
-
您能否举例说明您的文件是什么样的。以及您希望输出的样子。
-
建议...将文件导入数据帧到熊猫...一个库...他们有简单的读写方法...如果需要,您还可以合并帧对数据进行数学计算或执行枢轴和东西......
-
文件大吗?你能记住一对夫妇吗?为什么不使用
dict,其中键是lat,lon,值是累积的沉淀? -
谢谢大家的建议。文件不太大,可以放入内存中,如 BrianO 的所选答案所示。
标签: python file python-2.7 sum compare