从 txt 文件导入信息到 类
Import information to classes from a txt file
我的问题是 .txt 文件中的信息有 10 列,列之间的 space 不相同。
这是示例:
Date Time Latit(N) Long(E) Depth(km) MD ML Mw Region Method
---------- -------- -------- ------- ---------- ------------ ----------- -------
2021.12.18 22:27:57 36.2620 28.9352 10.5 -.- 3.1 3.2 AKDENIZ Quick
2021.12.18 21:53:20 35.0258 25.7753 5.0 -.- 2.7 -.- GIRIT ADASI ACIKLARI (AKDENIZ) Quick
2021.12.18 21:26:37 36.9778 27.7713 3.8 -.- 1.6 -.- GOKOVA KORFEZI (AKDENIZ) Quick
2021.12.18 20:35:30 37.8640 35.1760 5.4 -.- 1.5 -.- PINARBASI-CAMARDI (NIGDE) Quick
我需要以某种方式将信息导入我创建的 class。
这里是 class:
class txt_data:
def __init__(self, date, time, latit, long, depth, md, ml, mw, region, method):
self.date = date
self.time = time
self.latit = latit
self.long = long
self.depth = depth
self.md = md
self.ml = ml
self.mw = mw
self.region = region
self.method = method
def date(self):
return self.date()
def time(self):
return self.date()
def latit(self):
return self.latit()
def long(self):
return self.long()
def depth(self):
return self.depth()
def md(self):
return self.md()
def ml(self):
return self.ml()
def mw(self):
return self.mw()
def region(self):
return self.region()
def method(self):
return self.method()
a_file = open("input.txt")
for line in a_file:
date, time, latit, long, depth, md, ml, mw, region, method = line.strip().split(' ')
我试过 strip().split(' ')(没用)
如果有人有任何建议,我将不胜感激。
使用 regex 将所有列数据与捕获组匹配
^([\d.]+)\s+([\d:]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+|-\.-)\s+([\d.]+|-\.-)\s+([\d.]+|-\.-)\s+([\w\s()-]+?)\s+(\w+)$
import re
ptn = re.compile(
r"^([\d.]+)\s+([\d:]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+|-\.-)\s+([\d.]+|-\.-)\s+([\d.]+|-\.-)\s+([\w\s()-]+?)\s+(\w+)$")
result = []
with open("data.txt") as fic:
fic.readline() # header
fic.readline() # dash
for line in fic:
parts = ptn.findall(line.rstrip())
result.append(txt_data(*parts[0]))
请注意,以下是不正确的,因为 self.date
是一个 str
,您不能“调用”它
def date(self):
return self.date()
删除该方法,或使用getter正确的方法
def __init__(self, date, time, latit, long, depth, md, ml, mw, region, method):
self._date = date
@property
def date(self):
return self._date
我的问题是 .txt 文件中的信息有 10 列,列之间的 space 不相同。
这是示例:
Date Time Latit(N) Long(E) Depth(km) MD ML Mw Region Method
---------- -------- -------- ------- ---------- ------------ ----------- -------
2021.12.18 22:27:57 36.2620 28.9352 10.5 -.- 3.1 3.2 AKDENIZ Quick
2021.12.18 21:53:20 35.0258 25.7753 5.0 -.- 2.7 -.- GIRIT ADASI ACIKLARI (AKDENIZ) Quick
2021.12.18 21:26:37 36.9778 27.7713 3.8 -.- 1.6 -.- GOKOVA KORFEZI (AKDENIZ) Quick
2021.12.18 20:35:30 37.8640 35.1760 5.4 -.- 1.5 -.- PINARBASI-CAMARDI (NIGDE) Quick
我需要以某种方式将信息导入我创建的 class。
这里是 class:
class txt_data:
def __init__(self, date, time, latit, long, depth, md, ml, mw, region, method):
self.date = date
self.time = time
self.latit = latit
self.long = long
self.depth = depth
self.md = md
self.ml = ml
self.mw = mw
self.region = region
self.method = method
def date(self):
return self.date()
def time(self):
return self.date()
def latit(self):
return self.latit()
def long(self):
return self.long()
def depth(self):
return self.depth()
def md(self):
return self.md()
def ml(self):
return self.ml()
def mw(self):
return self.mw()
def region(self):
return self.region()
def method(self):
return self.method()
a_file = open("input.txt")
for line in a_file:
date, time, latit, long, depth, md, ml, mw, region, method = line.strip().split(' ')
我试过 strip().split(' ')(没用)
如果有人有任何建议,我将不胜感激。
使用 regex 将所有列数据与捕获组匹配
^([\d.]+)\s+([\d:]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+|-\.-)\s+([\d.]+|-\.-)\s+([\d.]+|-\.-)\s+([\w\s()-]+?)\s+(\w+)$
import re
ptn = re.compile(
r"^([\d.]+)\s+([\d:]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+|-\.-)\s+([\d.]+|-\.-)\s+([\d.]+|-\.-)\s+([\w\s()-]+?)\s+(\w+)$")
result = []
with open("data.txt") as fic:
fic.readline() # header
fic.readline() # dash
for line in fic:
parts = ptn.findall(line.rstrip())
result.append(txt_data(*parts[0]))
请注意,以下是不正确的,因为 self.date
是一个 str
,您不能“调用”它
def date(self):
return self.date()
删除该方法,或使用getter正确的方法
def __init__(self, date, time, latit, long, depth, md, ml, mw, region, method):
self._date = date
@property
def date(self):
return self._date