簡體   English   中英

輸出格式與預期不同

[英]Different output format than expected

我編寫了代碼來閱讀以下文本文件

Generated by trjconv : a bunch of waters t=   0.00000
 3000
    1SOL     OW    1  -1.5040   2.7580   0.6820
    1SOL    HW1    2   1.4788   2.7853   0.7702
    1SOL    HW2    3   1.4640   2.8230   0.6243
    2SOL     OW    4   1.5210   0.9510   2.2050
    2SOL    HW1    5  -1.5960   0.9780   2.1520
    2SOL    HW2    6   1.4460   0.9940   2.1640
 1000SOL     OW 2998   1.5310   1.7952   2.1981
 1000SOL    HW1 2999   1.4560   1.7375  -2.1836
 1000SOL    HW2 3000   1.6006   1.7369   2.2286
 3.12736   3.12736   3.12736
Generated by trjconv : a bunch of waters t= 9000.00000
 3000
    1SOL     OW    1   1.1579   0.4255   2.1329
    1SOL    HW1    2   1.0743   0.3793   2.1385

書面代碼:

F = open('Data.gro', 'r')
A = open('TTT.txt', 'w')
XO = []
I = range(1, 10)
with open('Data.gro') as F:
    for line in F:
        if line.split()[0] == '3000':
            A.write('Frame' + '\n')
            for R in I:
                line = next(F)
                P = line.split()
                x = float(P[3])
                XO.append(x)
                if line.split()[2] == '3000':
                   print('Oxygen atoms XYZ coordinates:')
                   A.write('Oxygen atoms XYZ coordinates:' + '\n')
                   A.write("%s\n" % (XO))
                   XO
                   XO[0] - XO[1]
                   XO = []
               else:
                   pass
        else:
            pass


A.close()

第一個問題:

我的問題是輸出文本文件如下所示。 它在文本文件中打印為一行。

FrameOxygen atoms XYZ coordinates:[-1.504, 1.4788, 1.464, 1.521, -1.596, 1.446, 1.531, 1.456, 1.6006]FrameOxygen atoms XYZ coordinates:[1.1579, 1.0743, 1.1514, 2.2976, 2.2161, 2.3118, 2.5927, -2.5927, 2.5365]

輸出應如下所示。

Frame
Oxygen atoms XYZ coordinates:
[-1.504, 1.4788, 1.464, 1.521, -1.596, 1.446, 1.531, 1.456, 1.6006]
Frame
Oxygen atoms XYZ coordinates:
[1.1579, 1.0743, 1.1514, 2.2976, 2.2161, 2.3118, 2.5927, -2.5927, 2.5365]

但是當我在閱讀時,它會在每個分離點的末尾顯示'\\ n'。 有沒有人有想法。

第二個問題

下一個問題是僅當我將粘貼代碼復制到python shell中時才會生成。 如果雙擊我的'code.py'文件,它不會生成put文件。 將粘貼代碼復制到python shell中時沒有錯誤。

1)您正在使用哪個平台和編輯器?

'\\ n'應按預期工作。

我懷疑你在Windows中運行代碼,並使用記事本來檢查文件。 嘗試使用寫字板或其他功能更強大的編輯器打開TTT.txt。 結果應該是預期的。

2)如果你在MS Windows中點擊腳本加倍,你很可能錯過了python打印的一些例外。 嘗試在命令提示符下運行它:

python code.py

安東尼是正確的。

Windows有這個問題。 使用寫字板打開文件。

回答你的第一個問題:

'\\n' (轉義的n )是換行符。

回答你的第二個問題:

粘貼到外殼中時經常遇到的問題是,粘貼發生的速度比外殼處理時快,這意味着命令行可能會被外殼忽略。

您可能遇到的另一個問題,特別是如果您將上述代碼粘貼到shell中,則是不一致的縮進。

您的if和else沒有對齊,可能是因為您僅在前一行縮進了3個空格。

                if line.split()[2] == '3000':
                   print('Oxygen atoms XYZ coordinates:')
                   A.write('Oxygen atoms XYZ coordinates:' + '\n')
                   A.write("%s\n" % (XO))
                   XO
                   XO[0] - XO[1]
                   XO = []
               else:
                   pass

此外,您可以嵌套文件的開頭。 特別是,這條線是多余的,可以刪除:

F = open('Data.gro', 'r')

你可以這樣做:

...
with open('Data.gro') as F:
    with open('TTT.txt', 'w') as A:
    ...

因此,如果您在編寫文件時出錯,您至少仍會關閉它。 (這意味着你可以刪除最后的A.close()。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM