TypeError:int()参数不可为'_io.TextIOWrapper' 地震数据处理Python代码报错求解
错误原因
- 核心问题是变量名重复冲突:处理事件时间时你将秒数值赋值给了变量
s,后续打开台站列表文件时,又把文件句柄赋值给了同一个变量s,导致后续调用int(s)时,s已经不是时间秒的字符串,而是_io.TextIOWrapper类型的文件对象,无法转为整数。 - 额外隐藏问题:读取文件行使用
split(" ")会严格按单个空格分割,你提供的all_st文件每行开头有空格,用该写法会分割出空字符串导致解包报错,建议使用无参split()自动处理连续空格、首尾空格。
修正后代码
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') # 用with上下文管理器自动管理文件句柄,无需手动调用close() with open(eventlist, "r") as e: for event in e.readlines(): year, mon, day, time, lat, lon = event.split() h = time.split(":")[0] # 小时 m = time.split(":")[1] # 分钟 sec = time.split(":")[2] # 秒,更换变量名避免冲突 with open(stationlist, "r") as st_file: for station in st_file.readlines(): stname, stlo, stla = station.split() OafterB = UTCDateTime(int(year), int(mon), int(day), int(h), int(m), int(sec)) print(OafterB)
补充说明
如果需要测试运行代码,可先执行pip install obspy安装依赖包。
内容的提问来源于stack exchange,提问作者alireza niksejel
相关产品推荐
相关产品推荐

