如何格式化从其他语言转换的 Python 脚本
How to format Python script converted from other language
我刚开始使用 Python,我知道 Python 需要缩进,这与任何同类语言不同。
但是,当我从其他来源复制并粘贴一段源代码时,代码大部分都是乱七八糟的,我不得不为每一行一次又一次地执行 tab/backspace/home。
我目前的主要设置是带有 Python 扩展名的 Visual Studio 代码,
我主要将 Emacs 用于格式化程序以及需要在 Linux 上进行编辑时使用。
https://www.emacswiki.org/emacs/ReformatBuffer
在过去,我可以使用 Visual Studio 或 Emacs 在几秒钟内格式化整个文件。
现在 Python,你必须手动完成,这是浪费时间。
我尝试了几个 IDEs(Spyder 等)和软件包 (yapf)。 IDE 的想法是它们会在您键入时为您提供帮助,而不是试图重新缩进所有内容。
比如Spyder有修复缩进的功能,但只修复了tab/space。 https://github.com/spyder-ide/spyder/issues/5565
而 yapf 仅在代码中没有缩进错误时才有效。
我的想法是,不像C/C++和其他语言,在Python语句中有一个not "end",所以工具不可能知道是否当前行是块的最后一行?
因为我使用了多种语言,有时我只是将一些语言从一种语言复制到另一种语言并制作一些 changes/replacements。
例如(在 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'
而我想在copy/paste之后翻译成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 手动更正它们。
请指教解决方法,谢谢
使用系统剪贴板将 Python 粘贴到 Emacs 通常可以正常工作。这听起来像是您正在使用基本上模拟输入 Emacs 的粘贴方法(也许您正在使用一些原始的 VT220 型终端仿真远程 运行ning Emacs?)这会导致 Emacs 在您粘贴的代码已经包含缩进的地方添加缩进.
您可以禁用 auto-indentation(也许粘贴到 *scratch*
缓冲区,然后使用 Emacs 的内部 copy/paste 到您正在使用的 Python 缓冲区?)或 运行 本地 Emacs(如果您需要在远程系统上编辑文件,可以使用 Tramp 连接到其他系统)。
我刚开始使用 Python,我知道 Python 需要缩进,这与任何同类语言不同。 但是,当我从其他来源复制并粘贴一段源代码时,代码大部分都是乱七八糟的,我不得不为每一行一次又一次地执行 tab/backspace/home。
我目前的主要设置是带有 Python 扩展名的 Visual Studio 代码, 我主要将 Emacs 用于格式化程序以及需要在 Linux 上进行编辑时使用。 https://www.emacswiki.org/emacs/ReformatBuffer
在过去,我可以使用 Visual Studio 或 Emacs 在几秒钟内格式化整个文件。
现在 Python,你必须手动完成,这是浪费时间。 我尝试了几个 IDEs(Spyder 等)和软件包 (yapf)。 IDE 的想法是它们会在您键入时为您提供帮助,而不是试图重新缩进所有内容。
比如Spyder有修复缩进的功能,但只修复了tab/space。 https://github.com/spyder-ide/spyder/issues/5565
而 yapf 仅在代码中没有缩进错误时才有效。
我的想法是,不像C/C++和其他语言,在Python语句中有一个not "end",所以工具不可能知道是否当前行是块的最后一行?
因为我使用了多种语言,有时我只是将一些语言从一种语言复制到另一种语言并制作一些 changes/replacements。 例如(在 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'
而我想在copy/paste之后翻译成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 手动更正它们。
请指教解决方法,谢谢
使用系统剪贴板将 Python 粘贴到 Emacs 通常可以正常工作。这听起来像是您正在使用基本上模拟输入 Emacs 的粘贴方法(也许您正在使用一些原始的 VT220 型终端仿真远程 运行ning Emacs?)这会导致 Emacs 在您粘贴的代码已经包含缩进的地方添加缩进.
您可以禁用 auto-indentation(也许粘贴到 *scratch*
缓冲区,然后使用 Emacs 的内部 copy/paste 到您正在使用的 Python 缓冲区?)或 运行 本地 Emacs(如果您需要在远程系统上编辑文件,可以使用 Tramp 连接到其他系统)。