for 循环、多个 for 循环或其他内容中的多个命令?
Multiple commands within a for-loop, multiple for-loops, or something else?
对于一项任务(即没有 pandas 或任何会使它更容易的东西),我必须在 python3/numpy/Matplotlib 中绘制一个多边形,但数据文件在第一个障碍上给我带来了麻烦而且我不知道是什么导致了问题。
.dat 文件有 2 列,每列几行,每行如下所示:
(34235.453645, 68597.5469)
到目前为止,我已经想出了如何删除带有 .replace
的每一行中的括号和逗号,所以它使得:
34235.453645 68597.5469
有了这个:
lang-js
#Assign columns
data_easting=[]
data_northing=[]
#Open the .dat file (in Python)
Poly = open('poly.dat','r')
#Loop over each line of poly.dat.
for replace in Poly.readlines():
#Replace the extraneous information ("(",",",")") with nothing, rather than multiple commands to strip and remove them. Stack Overflow Source for idea:
replace = replace.replace('(','').replace(',','').replace(')','')
#Loop over the replaced data to split into lines 1(easting) and 2(northing) and append.
然而,当我想在最后的注释之后将返回的“替换”字符串拆分为 x 和 y(data_northing 和 _easting 列表)时,其中包含另一个 for 循环:
for line in replace.readlines():
x,y=line.split()
data_easting.append(x)
data_northing.append(y)
我收到一条错误消息,指出 str“replace”不能使用 readlines 函数。
如果我删除缩进(两个 for 循环在同一级别),则会出现相同的错误。
如果我用前一个 for 循环中的“Poly”替换“replace”,“列表”只是 x,y 数据的第一行 (print (x[n]) just returns数字字符串的第 n 个字符)
如果我像这样将循环和命令组合在一起;
for replace, line in Poly.readlines():
x,y =line.split
data_easting.append(x)
data_northing.append(y)
并尝试命令我收到“未定义线”的错误,或者我收到值错误:
“ValueError:没有足够的值来解压(预期 2,得到 1)”
现在可能很明显,我是 Python 的新手,无法弄清楚如何克服这个问题继续绘制数据(我基本上可以接受)。我如何使第二个函数从第一个开始,我是否让第一个函数产生实际输出然后 运行 第二个命令(即“Make Poly2.dat”然后拆分该数据文件)?
当我四处寻找问题时,很多解决方案都会出现迭代器。可以在这里应用吗?
编辑:我最终放弃了这个并使用 .strip('()\n'
和 .split(', ')
来获取数据,但是现在虽然我有 2 个字符串列表,其中只有我需要的数字,但我仍然得到Value Error; not enough values to unpack (expected 2, got 1)
.
好吧,你要做的就是在原来的循环下面插入另一个for循环,像这样
for replace in Poly.readlines():
#Replace the extraneous information ("(",",",")") with nothing, rather than multiple commands to strip and remove them. Stack Overflow Source for idea:
replace = replace.replace('(','').replace(',','').replace(')','')
x,y=replace.split("#where you want to split?")
data_easting.append(x)
data_northing.append(y)
#Assign columns
data_easting=[]
data_northing=[]
#Open the .dat file (in Python)
Poly = open('poly.dat','r')
#Loop over each line of poly.dat.
for line in Poly.readlines():
line = line.replace('(', '')
line = line.replace(')', '')
xy_tuple = line.split(',')
data_easting.append(xy_tuple[0].strip())
data_northing.append(xy_tuple[1].strip())
Poly.close()
您似乎将代码推向了所有错误的方向。你需要学习如何调试小程序。
通过这样的数据处理,您应该随时打印出结果,您将看到数据在每个阶段的样子。
也许你的意思是:
data_easting=[]
data_northing=[]
#Open the .dat file (in Python)
Poly = open('poly.dat','r')
#Loop over each line of poly.dat.
for replace in Poly.readlines():
replace = replace.strip()
if replace:
replace = replace.replace('(','').replace(',','').replace(')','')
print(replace)
x,y = replace.split()
data_easting.append(x)
data_northing.append(y)
更新:使用strip()
清理空行。
对于一项任务(即没有 pandas 或任何会使它更容易的东西),我必须在 python3/numpy/Matplotlib 中绘制一个多边形,但数据文件在第一个障碍上给我带来了麻烦而且我不知道是什么导致了问题。
.dat 文件有 2 列,每列几行,每行如下所示:
(34235.453645, 68597.5469)
到目前为止,我已经想出了如何删除带有 .replace
的每一行中的括号和逗号,所以它使得:
34235.453645 68597.5469
有了这个:
lang-js
#Assign columns
data_easting=[]
data_northing=[]
#Open the .dat file (in Python)
Poly = open('poly.dat','r')
#Loop over each line of poly.dat.
for replace in Poly.readlines():
#Replace the extraneous information ("(",",",")") with nothing, rather than multiple commands to strip and remove them. Stack Overflow Source for idea:
replace = replace.replace('(','').replace(',','').replace(')','')
#Loop over the replaced data to split into lines 1(easting) and 2(northing) and append.
然而,当我想在最后的注释之后将返回的“替换”字符串拆分为 x 和 y(data_northing 和 _easting 列表)时,其中包含另一个 for 循环:
for line in replace.readlines():
x,y=line.split()
data_easting.append(x)
data_northing.append(y)
我收到一条错误消息,指出 str“replace”不能使用 readlines 函数。
如果我删除缩进(两个 for 循环在同一级别),则会出现相同的错误。
如果我用前一个 for 循环中的“Poly”替换“replace”,“列表”只是 x,y 数据的第一行 (print (x[n]) just returns数字字符串的第 n 个字符)
如果我像这样将循环和命令组合在一起;
for replace, line in Poly.readlines():
x,y =line.split
data_easting.append(x)
data_northing.append(y)
并尝试命令我收到“未定义线”的错误,或者我收到值错误: “ValueError:没有足够的值来解压(预期 2,得到 1)”
现在可能很明显,我是 Python 的新手,无法弄清楚如何克服这个问题继续绘制数据(我基本上可以接受)。我如何使第二个函数从第一个开始,我是否让第一个函数产生实际输出然后 运行 第二个命令(即“Make Poly2.dat”然后拆分该数据文件)?
当我四处寻找问题时,很多解决方案都会出现迭代器。可以在这里应用吗?
编辑:我最终放弃了这个并使用 .strip('()\n'
和 .split(', ')
来获取数据,但是现在虽然我有 2 个字符串列表,其中只有我需要的数字,但我仍然得到Value Error; not enough values to unpack (expected 2, got 1)
.
好吧,你要做的就是在原来的循环下面插入另一个for循环,像这样
for replace in Poly.readlines():
#Replace the extraneous information ("(",",",")") with nothing, rather than multiple commands to strip and remove them. Stack Overflow Source for idea:
replace = replace.replace('(','').replace(',','').replace(')','')
x,y=replace.split("#where you want to split?")
data_easting.append(x)
data_northing.append(y)
#Assign columns
data_easting=[]
data_northing=[]
#Open the .dat file (in Python)
Poly = open('poly.dat','r')
#Loop over each line of poly.dat.
for line in Poly.readlines():
line = line.replace('(', '')
line = line.replace(')', '')
xy_tuple = line.split(',')
data_easting.append(xy_tuple[0].strip())
data_northing.append(xy_tuple[1].strip())
Poly.close()
您似乎将代码推向了所有错误的方向。你需要学习如何调试小程序。
通过这样的数据处理,您应该随时打印出结果,您将看到数据在每个阶段的样子。
也许你的意思是:
data_easting=[]
data_northing=[]
#Open the .dat file (in Python)
Poly = open('poly.dat','r')
#Loop over each line of poly.dat.
for replace in Poly.readlines():
replace = replace.strip()
if replace:
replace = replace.replace('(','').replace(',','').replace(')','')
print(replace)
x,y = replace.split()
data_easting.append(x)
data_northing.append(y)
更新:使用strip()
清理空行。