Converting a python code for Mac to Windows
我对python不熟悉,我有一个问题,关于一段python代码,它从一个模型输出文件创建一个清理过的输出文件。这段代码是为Mac用户编写的,但现在我想在Windows中运行它。但它给出了一个错误信息。你能帮我转换这个代码以便在Windows中使用吗?谢谢。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import sys
if len(sys.argv) > 1:
fileName = sys.argv[1]
else:
print"selected_um_b.out" #insert file name here
sys.exit()
f = open(fileName)
counter = 0
fw = open(fileName+".cleaned", 'w')
for line in f:
line = line.strip()
counter = counter + 1
if counter <= 4:
fw.write(line+"
");
continue
values = line.split("\t")
if (values[4].strip() =="-99" or values[5].strip() =="0"): continue
fw.write("\t".join(values)+"
")
f.close() |
更新
错误消息为:
Traceback (most recent call last): File
"C:\trial_batch\clean_output.py", line 7, in sys.exit()
SystemExit
号
- 以后,在包含更多信息时编辑您的问题。
- @蒂姆波斯特:谢谢。我不知道怎么做。非常感谢。
- 别担心。现在看来这是可以回答的,但是当你的问题是开放的时候,一定要经常注意评论,然后编辑你的问题来解决它们:)
- 我只是好奇,我的评论到底去哪儿了?
- @很抱歉,我没有删除任何内容。
程序在执行时需要在命令行上有一个文件名。似乎您没有提供,所以程序退出(sys.exit()调用终止程序)。
你想怎么用它?如果只想转换一个文件,请将该文件和python脚本放在同一个目录中。用filename ="yourfilename.typ"替换第3行到第7行(不要缩进该行);它将读取文件(在我的示例中为yourfilename.typ),并在文件名中写入一个"cleaned"的输出文件。
- 不过,这有点奇怪。调用sys.exit()会引发一个SystemExit异常,它会停止解释器,但我认为它不应该在正常情况下打印一个回溯。
- @Art SWRI:非常感谢。我根据您的建议修改了代码,并将代码和文件放在同一个目录中。我的文件名是amd_ex3。现在,错误消息是:traceback(most recent call last):file"d:pythonartart.py",第17行,inf=open(amd_ex3.dat)name error:name'amd_ex3'is not defined
- @ArtSWRI:我正在使用此代码转换一个文件。
- 您没有按照我的建议执行,而是将文件名放入open()调用中。这也没关系——只需在它周围加上引号;它是一个字符串。(假设您删除了从if len(sys.argv) > 1:到system.exit的行。)
- @阿尔茨瓦里:对不起。我可能犯了个错误。以下是修改后的代码:import sys if len(sys.argv)>1:file name=sys.argv[1]else:print"data.out"在此处插入文件名sys.exit()filename="amd ex3.dat"f=open(amd ex3.dat)counter=0 f w=open(amd ex3.dat+".cleaned","w"),用于f:line=line.strip()counter=counter+1 if counter中的行<=4:fw.write(line+"");continue values=line.split(" ")if(values[4].strip()="-99"或values[5].strip()=="0"):continue fw.write(" ".join(values)+")f.close())
- @阿尔茨瓦里:对不起,我明白你的意思了。我把"在所有文件名周围"("amd_ex3.dat")放进去,它起作用了。现在,我得到一条新的错误消息:traceback(most recent call last):file"d:pythonartart.py",line 30,inif(values[4].strip()="-99"or values[5].strip()=="0"):continue index error:list index out of range
- 行values = line.split("\t")将输入行(在第4行之后)拆分为由制表符分隔的块。(反斜杠-t的意思是-a标签)。这些部分被放入"values"变量中,该变量将是一个数组(实际上是一个列表,但您可以将其视为一个数组)。可能的问题是,某些行包含的数据块少于6个;values[4]和values[5]从数组中选择第5和第6个数据块。(编号以零开始,注1)。检查输入文件格式。
- 顺便说一句,该程序设置为跳过第5个块为"-99"的行,以及第6个块为"0"的行。(并不意味着你会被二次猜测,但如果这是一次性的事情,你可能更容易与一个编辑手动操作…)
- @阿尔茨瓦里:非常感谢你的帮助。是的。输入文件中有问题。但是代码现在正在工作。关于如何使用代码:我使用转换模型的输出文件,以便每次从模型中获得输出时,都使用此脚本。再次感谢你的时间。这很有帮助。