gpt4 book ai didi

python - 忽略条件的后续实例(for 循环和 if 语句)

转载 作者:太空宇宙 更新时间:2023-11-03 17:54:05 24 4
gpt4 key购买 nike

我之前发布了一些关于索引超出范围错误的代码;但是,在解决该错误后,我意识到获取必要信息的过程存在缺陷。

我在 Python 中编写了一个 for 循环,用于在数据文件中搜索标识符匹配且另一个参数发生重大更改的实例。当该实例发生时,相关数据将输出到文本文件。我没有意识到我想忽略任何后续出现的相同情况。我只想记录第一次出现的情况,然后继续处理文件,直到出现具有不同标识符的情况,继续该过程直到文件末尾。

输入数据如下所示:

0000 0.0000000000 185263.9890 105232.4887 0.0000000000 345.0928095 0.2982502454

0001 0.0000000000 185163.8872 105235.6420 0.0000000000 344.4662790 0.5691114931

0001 218.1599792 185187.4241 105332.8326 100.0000000 30.21264632 0.4583792149

0001 2070.891273 185259.6501 105401.9948 200.0000000 342.4030385 0.05397436763

0002 0.0000000000 185073.8381 105257.5082 0.0000000000 289.0103714 0.1765702856

0002 548.7104537 185007.5650 105182.6224 100.0000000 283.1207050 0.1822454800

0002 4339.891390 184907.6061 105179.7550 200.0000000 235.0171868 0.02637700539

0003 0.0000000000 185044.6468 105355.0609 0.0000000000 141.5931561 0.5491341407

0004 0.0000000000 185037.7703 105455.3306 0.0000000000 148.8916916 0.9710776916

0004 140.8620875 185106.3138 105382.5172 100.0000000 122.1786717 0.7099142273

0004 602.2794100 185206.2952 105384.4448 200.0000000 96.31412264 0.2167235496

0004 2841.576352 185251.6140 105424.2290 260.3040892 139.3786179 0.02692992078

0005 0.0000000000 185879.1193 105481.7119 0.0000000000 240.1629722 0.1176913655

0005 155.2441594 185779.6779 105492.2674 100.0000000 289.7377882 0.6441466166

0005 305.7366429 185688.7618 105533.9118 200.0000000 296.1130146 0.6644850139

0005 632.1957592 185600.2198 105580.3909 300.0000000 298.9600016 0.3063170700

0005 889.3161045 185516.5649 105549.4496 389.1936581 32.05095338 0.3468945953

0005 1114.532354 185538.1521 105576.9088 424.1223441 8.425251603 0.1550895465

0005 1282.115239 185545.3480 105477.1680 524.1223441 3.718447942 0.5967196476

每行的第一项是标识符。每行的第三项和第四项是坐标点。每行中的第六项是方向角值(这是感兴趣的参数)。目标是找到具有相同标识符的两条线,并比较方向角值是否有显着变化(在本例中大于 90 度),然后记录标识符和坐标点。例如:

0001 0.0000000000 185163.8872 105235.6420 0.0000000000 344.4662790 0.5691114931

0001 218.1599792 185187.4241 105332.8326 100.0000000 30.21264632 0.4583792149

这两行中,标识符0001匹配,方向角变化超过90度。此条件由 for 循环中的 if 语句标记,并将标识符和坐标点输出到文本文件。我有这个过程。但是...

0001 0.0000000000 185163.8872 105235.6420 0.0000000000 344.4662790 0.5691114931

0001 218.1599792 185187.4241 105332.8326 100.0000000 30.21264632 0.4583792149

0001 2070.891273 185259.6501 105401.9948 200.0000000 342.4030385 0.05397436763

序列中的第三行也与标识符匹配,并且方向角变化大于 90 度,因此它也会被条件语句标记并记录到输出文件中。我想忽略该条件的任何重复实例,只记录第一次出现的情况。

此外,当比较的两行没有匹配的标识符时,我想标记并记录坐标数据,尽管我认为我可以将其作为 if/else 与其他条件组合的一部分来处理。更重要的是能够忽略对于已经标记和记录的标识符重复出现的大于 90 度的方向角变化。由于对 Python(以及一般编程)不太熟悉,我似乎无法找到针对此场景的现有解决方案。我不一定在寻找复杂的解决方案。我只需要捕获一组特定的数据以便在 ArcGIS 项目中重复使用。

感谢您的建议。

line1 = trackdata.readline()
line2 = trackdata.readline()

for i in range(l-1):

file_no1 = line1.split()[0]
time1 = line1.split()[1]
x1 = line1.split()[2]
y1 = line1.split()[3]
length1 = line1.split()[4]
flow_dir1 = float(line1.split()[5])
flow_mag1 = line1.split()[6]

file_no2 = line2.split()[0]
time2 = line2.split()[1]
x2 = line2.split()[2]
y2 = line2.split()[3]
length2 = line2.split()[4]
flow_dir2 = float(line2.split()[5])
flow_mag2 = line2.split()[6]

if file_no1 == file_no2:
if abs(flow_dir2 - flow_dir1) > 90.0:
print >> coordinates1, file_no1, x1, y1

line1 = line2
line2 = trackdata.readline()

最佳答案

你可以尝试这样的事情;

if file_no1 == file_no2:
if abs(flow_dir2 - flow_dir1) > 90.0:
print >> coordinates1, file_no1, x1, y1
tempLine = trackdata.readline() # grabs next line
temp_no = tempLine.split()[0] # grabs file id
while temp_no == file_no1: # runs while its the same as the file
# id that gave us the condition
tempLine = trackdata.readline()
temp_no = tempLine.split()[0]
line1 = tempLine # set new lines
line2 = trackdata.readline()

if file_no1 = line1.split()[0]:
line1 = line2
line2 = trackdata.readline()

这里要检查的事情是确保您不会尝试读取超过文件末尾的内容,因此您需要为此添加检查

关于python - 忽略条件的后续实例(for 循环和 if 语句),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28751404/

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