gpt4 book ai didi

python - 比较两个文本文档并根据一个文本文档跳过某些行 - Python

转载 作者:太空宇宙 更新时间:2023-11-04 05:35:02 25 4
gpt4 key购买 nike

我正在做一个 Python 项目。我有一个正在读取的分号加换行符分隔的文本文件,其中包含所有 50 个州(包括 DC)。因此,每个状态都有自己的以分号 (;) 结尾的行。下面是一个例子。我还有另一个正在读取的文件,其中包含大量信息。 The text document can be found here .

我想跳过任何以州名称开头的行,方法是针对包含所有五十个州的文本文件以及任何此类行下方的行进行测试。我不需要这些信息。有没有办法逐行测试它是否以州名称开头,如果它与另一个文本文件中的五十个州之一匹配,则跳过该行及其下面的行?

例如,在超链接文本文件中,43 行以 Alaska 开头。我想跳过那一行和它下面的那一行。我想将其余信息存储在一个数组中。当我点击 244 行时,下一个州 (Alabama) 的信息开始显示。我想跳过 244 行和它下面的行,并做同样的事情 - 将所有信息存储在数组中,最后编译一个大数组。

这是五十个州文件的前四行:

Alabama; 
Alaska;
Arizona;
Arkansas;

为了澄清,我唯一感兴趣的信息是 ICAO 数据,这是超链接文本文件中的第 3 列。

此外,如果特定线路没有 ICAO 信息,是否会成为问题?例如,超链接文本文档中的 63 行没有值。

这是我目前的代码:

import numpy as np
#This program reads in the ICAO data file found at: http://weather.rap.ucar.edu/surface/stations.txt

with open('ICAOlist.txt','r') as dataICAO:
icaoData = np.loadtxt(dataICAO, dtype = str, delimiter = ' ', skiprows = 41)
with open('listOfAllStates.txt', 'r') as dataStates:
statesData = np.loadtxt(dataStates, dtype = str, delimiter = ';')

最佳答案

我很确定这只是打破您的顾虑的问题。首先,您只想加载一次“状态名称文件”:

# Get all the states as an array
def load_states(statesFile):
with open(statesFile, 'r') as states:
return np.loadtxt(states, dtype = str, delimiter = ';')

现在,我们需要遍历 ICAO 数据中的每一行:

def load_icao_data(state_filename, icao_filename):
states = load_states(state_filename)
with open(icao_filename, 'r') as input:
previous_line = None
for line in input:
if valid_line(line, states) and valid_line(previous_line, states):
process_line(line)
previous_line = line

您必须编写的两个函数是 valid_line(它应该返回一个 bool)和 process_line(它应该做您需要的任何事情完成数据)。

valid_line 应包含状态列表以及当前行。它看起来像这样:

def valid_line(line, states):
if not line or len(line) == 0:
return True # if the line is empty or None
for state in states:
if line.startswith(state):
return False
return True

process_line 留给你决定。有道理吗?

附录:

我在您的实际数据中注意到,state 并不是确定一行是否“坏”的真正因素。您可以将 valid_line 重写为:

def valid_line(line):
return len(line) > 3 # Eliminates short/empty lines
&& line[0] != '!' # Eliminates 'comment' lines
&& line[2] == ' ' # Eliminates 'state title' lines
&& line[3] != ' ' # Eliminates 'header column' line

然后你的load_icao_data变成:

def load_icao_data(icao_filename):
with open(icao_filename, 'r') as input:
for line in input:
if valid_line(line):
process_line(line)

关于python - 比较两个文本文档并根据一个文本文档跳过某些行 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35905605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com