如何格式化其他语言转换的Python脚本

2024-05-28 23:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始使用Python,我知道Python需要缩进,不像任何类似的语言。 但是,当我从其他源代码复制并粘贴一块源代码时,代码大部分是混乱的,我必须为每一行反复执行tab/backspace/home。你知道吗

我目前的主要设置是带有Python扩展的visualstudio代码, 我主要使用Emacs作为格式化程序,当我需要在Linux上编辑时。 https://www.emacswiki.org/emacs/ReformatBuffer

在过去,我可以使用visualstudio或Emacs在几秒钟内格式化整个文件。你知道吗

现在使用Python,您必须手动执行,这是浪费时间。 我尝试了几个ide(Spyder等)和包(yapf)。beindide的想法是当你打字的时候他们会帮你,但不会试图重复所有的东西。你知道吗

例如,Spyder有一个固定缩进功能,但它只固定tab/空格。https://github.com/spyder-ide/spyder/issues/5565

而yapf只在代码中没有缩进错误时工作。你知道吗

我的想法是,与C/C++和其他语言不同,Python语句中没有一个“结束”,因此工具不可能知道当前行是否是块的最后一个。你知道吗

因为我用了几种语言,有时我只是从一种语言复制到另一种语言,然后做一些更改/替换。 例如(在IDL语言中)

    boundary = read_binary(boundary_file, data_type = 4, data_dims = [ncolumn, nrow])  
    ;;==========================================================================================================
    nan_index = WHERE( boundary EQ missing_value, nan_count)
    good_index = WHERE( boundary NE missing_value, good_count)
    IF nan_count EQ 0 THEN BEGIN
       RETURN
    ENDIF ELSE BEGIN
       boundary[ nan_index ] = 0
       boundary[ good_index ] = 1
    ENDELSE 
    :do something else
    sFilename_rock = 'something'

在复制/粘贴之后,在替换之后,我想翻译成python:

        def test
            import numpy as np
            sFilename_boundary = 'some_file'
        ifs = open(sFilename_boundary, 'rb')
    aBoundary = np.fromfile(ifs, '<f4')
    aBoundary.shape = (nrow, ncolumn)
    ifs.close()
        #==========================================================================================================
        nan_index = np.where(aBoundary == 1)
        nan_count = len(nan_index)

        if nan_count == 0 :
           pass
        else:
           boundary[ nan_index ] = 0
           boundary[ good_index ] = 1
    #something else
    sFilename_rock = 'something'

在这种情况下,整个代码结构对我来说是无意义的,我必须使用yapf逐个手动更正它们。你知道吗

请给出解决方案,谢谢。你知道吗


Tags: 代码语言index源代码countnpnanelse
1条回答
网友
1楼 · 发布于 2024-05-28 23:22:07

使用系统剪贴板将Python粘贴到Emacs通常可以正常工作。这听起来像是您在使用一个基本上模拟输入Emacs的粘贴方法(也许您正在使用一些原始的VT220类型的终端模拟远程运行Emacs?)这会导致Emacs在粘贴的代码已经包含缩进的地方添加缩进。你知道吗

您可以禁用自动缩进(可能粘贴到*scratch*缓冲区,然后使用Emacs的内部复制/粘贴到您正在使用的Python缓冲区?)或者在本地运行Emacs(如果需要在远程系统上编辑文件,可以使用Tramp连接到其他系统)。你知道吗

相关问题 更多 >

    热门问题