从Python脚本回溯:无效的文本
简而言之,Python脚本应该做的是加载和计算ASCII类型的文件 对于一些以前预处理过的文件,它可以正常工作,而对于我的文件,它会抛出一个错误。在任何情况下,我的文件看起来都与它应该的不同(输入方面)从Python脚本回溯:无效的文本,python,ascii,traceback,Python,Ascii,Traceback,简而言之,Python脚本应该做的是加载和计算ASCII类型的文件 对于一些以前预处理过的文件,它可以正常工作,而对于我的文件,它会抛出一个错误。在任何情况下,我的文件看起来都与它应该的不同(输入方面) 这里的错误很明显 'nrows'无法转换为int 然而,出于某种原因,您调用此类型时,rows不是有效整数的字符串表示形式,似乎包含字符串'nrows' 例如: >>> type_rows = "nrows" >>> int(type_rows) Trac
这里的错误很明显
'nrows'
无法转换为int
然而,出于某种原因,您调用此类型时,rows
不是有效整数的字符串表示形式,似乎包含字符串'nrows'
例如:
>>> type_rows = "nrows"
>>> int(type_rows)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'nrows'
>>>
>>键入_rows=“nrows”
>>>int(类型_行)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:基数为10的int()的文本无效:“nrows”
>>>
您要在单个空格上拆分:
option= []
for elem in content:
option.extend(elem.strip().split(" "))
你在某个地方有一个额外的空间,所以你所有的偏移量都是1
您只需*删除str.split()
的参数即可解决此问题。然后,文本将自动剥离,并在任意宽度的空白上拆分。文件中是否有1、2或20个空格无关紧要,然后:
with open("options_PDI.txt") as f:
option = f.read().split()
请注意,我甚至不需要将文件拆分成行或去掉换行符
请注意,您对文件的处理仍然相当脆弱;您希望在某些位置存在某些值。如果文件包含标签值
样式行,则可以将整个文件读入字典:
with open("options_PDI.txt") as f:
options = dict(line.strip().split(None, 1) for line in f if ' ' in line)
并使用该字典处理各种值:
type_ncols = int(options['ncols'])
type\u-ncols
或type\u-nrows
是一个带有文本'nrows'
的字符串。我打赌是后者。您必须为我们共享更多代码才能告诉您其他信息。异常错误消息非常清楚,可以理解您的文件包含无法转换为整数值的nrows
字符串。奇怪的是,我查看了ASCII文件,它们在开始时都有ncols
和nrows
。稍后我将分享更多的代码。因此,请仔细查看代码以及它是如何解析这些文件的。我们无法告诉您这里出现了什么问题,因为您a)没有共享代码,b)没有共享文件。给我们一个机会来重现这个问题,我们可能会有所帮助。谢谢,我当时弄糊涂了:)事实上,这是真的。我的意思是,与工作的另一个ASCII文件相比,我遇到问题的那个文件在所有行的第一列上都有一个额外的空白,没有特别的原因。这不应该产生。谢谢很可能这就是问题所在。现在,不知何故,我必须弄清楚这一部分。有没有办法通过在脚本中添加一些内容来忽略这一点?我想我做错了什么。我还有其他错误。问题是,option.txt
不过是一个获取路径和一些参数的地方。@Geosphere:我添加了另一种解析文件的方法;把整件事读到字典里,然后用它把选项映射到值。我似乎解决不了这个问题。显然,我笨到会得到一个ValueError:dictionary update sequence元素#10的长度为0;2是必需的
with open("options_PDI.txt") as f:
option = f.read().split()
with open("options_PDI.txt") as f:
options = dict(line.strip().split(None, 1) for line in f if ' ' in line)
type_ncols = int(options['ncols'])