【问题标题】:Different output format than expected输出格式与预期不同
【发布时间】:2014-02-08 09:37:38
【问题描述】:

我已经编写了代码来读取以下文本文件

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”文件,它不会生成输出文件。将粘贴代码复制到 python shell 时没有错误。

【问题讨论】:

    标签: python python-2.7 python-3.x newline


    【解决方案1】:

    1) 您使用的是哪个平台和编辑器?

    '\n' 应该按预期工作。

    我怀疑您是在 Windows 中运行代码并且您使用记事本检查文件。尝试使用写字板或其他功能更强大的编辑器打开 TTT.txt。结果应该和预期的一样。

    2) 如果你在 MS Windows 中双击脚本,你很可能错过了一些由 python 打印的异常。尝试在命令提示符下运行它:

    python code.py
    

    【讨论】:

      【解决方案2】:

      安东尼是正确的。

      Windows 有这个问题。使用写字板打开文件。

      【讨论】:

        【解决方案3】:

        回答你的第一个问题:

        '\n',一个转义的n,是换行符。

        回答你的第二个问题:

        粘贴到 shell 时的一个常见问题是粘贴的速度比 shell 处理它的速度要快,这意味着 shell 可能会忽略这些行。

        您可能遇到的另一个问题是缩进不一致,尤其是在将上述代码粘贴到 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()。)

        【讨论】:

        • 我不清楚你要说什么。我用'\n'
        • 在 shell 中正常工作并生成输出文件。但是当我双击我的代码文件'.py'文件时,它没有生成输出文件仔细阅读问题。
        猜你喜欢
        • 2019-05-01
        • 1970-01-01
        • 2022-07-06
        • 2015-04-06
        • 2019-12-12
        • 1970-01-01
        • 1970-01-01
        • 2014-08-06
        • 2021-01-14
        相关资源
        最近更新 更多