【发布时间】:2021-12-04 08:35:45
【问题描述】:
我正在尝试将文本文件逐行读取为整数。我做了我在这里看到的每一个建议,但没有一个对我有用。这是我正在使用的代码。它从 datadir 读取一些地震数据并评估 SNR 比率以决定是保留数据还是删除数据。为此,我需要计算站与地震之间的距离,信息来自输入文件。
from obspy import UTCDateTime
import os
datadir = "/home/alireza/Desktop/Saman/Eqcomplete"
homedir = "/home/alireza/Desktop/Saman"
eventlist = os.path.join (homedir, 'events.dat')
stationlist = os.path.join (homedir, 'all_st')
e = open (eventlist, "r")
for event in e.readlines():
year, mon, day, time, lat, lon = event.split (" ")
h = str (time.split (":")[0]) # hour
m = str (time.split (":")[1]) # minute
s = str (time.split (":")[2]) # second
s = open (stationlist, "r")
for station in s.readlines():
stname, stlo, stla = station.split (" ")
OafterB = UTCDateTime (int(year), int(mon), int(day), int(h), int(m), int(s))
print (OafterB) # just to have an output!
s.close ()
e.close ()`
- 更新:
- 有两个输入文件:
- events.dat 类似于:
2020 03 18 17:45:39 -11.0521 115.1378
- all_st 就像:
AHWZ 48.644 31.430
AFRZ 59.015 33.525
NHDN 60.050 31.493
BDRS 48.881 34.054
BMDN 48.825 33.772
HAGD 49.139 34.922
这是输出:
Traceback (most recent call last):
File "SNR.py", line 21, in <module>
OafterB = UTCDateTime (int(year), int(mon), int(day), int(h), int(m), int(s))
TypeError: int() argument must be a string, a bytes-like object or a number, not '_io.TextIOWrapper'
这里测试你需要安装obspy包的代码。
pip install obspy 可能有用。
【问题讨论】:
-
你调试了吗? h、m、s 变量的值是多少?
-
我尝试了我所知道的一切。我不是python专家。 h、m 和 s 是小时、分钟和秒。您可以看到示例输入。
-
我看不出这个错误是如何由您显示的代码引起的。听起来您可能向
int()提供了一个文件对象。你能提供完整的堆栈跟踪,而不仅仅是简单的错误消息吗? (此外,您的代码不能单独测试。请仔细阅读minimal, reproducible example 的预期内容。) -
包含其余代码确实使您的示例完整且可运行,因此做得很好。但这远非最小……这是很多与您的问题无关的代码,供其他人尝试帮助您。我建议尝试MRE page 上“最小”下描述的两种方法中的任何一种。奖励:它还可以帮助您更好地调试。
-
更新:我无法通过发布的代码和示例数据重现此错误。它可能以某种方式涉及数据文件的其他部分。您是否使用此特定子集测试了您的代码以查看它是否仍会产生错误?