【问题标题】:How do I read a text file in python via PowerShell? Windows 10如何通过 PowerShell 在 python 中读取文本文件?视窗 10
【发布时间】:2016-03-12 19:19:07
【问题描述】:

我在将文本文件读入我的 python 程序时遇到问题。

import sys

words = sys.stdin.readlines()

我正在通过标准输入读取文件,但是当我尝试执行程序时出现此错误。

PS> python evil_61.py < evilwords.txt

At line:1 char:19
+ python evil_61.py < evilwords.txt
+                   ~

The '<' operator is reserved for future use.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RedirectionNotSupported

谁能告诉我如何运行这些类型的程序,因为它对我的课程至关重要,我宁愿使用 Windows 而不是 Linux。

【问题讨论】:

    标签: python powershell


    【解决方案1】:

    由于 PowerShell 不支持 &lt; 进行输入重定向,因此请在管道​​中使用 Get-Content

    Get-Content evilwords.txt | python evil_61.py 
    

    注意:添加 -Raw 开关 - 它将文件作为单个多行字符串读取 - 原则上会加快速度(以增加内存消耗为代价),但 PowerShell 总是从 PowerShell 7.2 开始,将换行符附加到通过管道传输到外部程序的数据(请参阅this answer),因此目标程序通常会在末尾看到一个额外的空行Get-Content 的逐行流式传输的默认行为避免了这种情况。

    注意字符编码问题:

    • Get-Content,在没有 -Encoding 参数的情况下,采用以下编码:

      • Windows PowerShell(最新和最终版本为 5.1 的内置 Windows 版本):活动的 ANSI 代码页,活动的旧系统区域设置(语言对于非 Unicode 程序)。
      • PowerShell (Core) 7+: (BOM-less) UTF-8
    • 在通过管道传递线路时,它们会根据存储在$OutputEncoding preference variable 中的编码进行(重新)编码,默认为:

      • Windows PowerShellASCII(!)
      • PowerShell (Core) 7+:(无 BOM)UTF-8

    如您所见,只有 PowerShell (Core) 7+ 表现出一致 行为,但不幸的是,从 PowerShell Core 7.2.0-preview.9 开始,这尚未扩展到捕获来自外部程序的输出,因为控制接收数据解释的编码(存储在[Console]::OutputEncoding])仍默认为系统的活动OEM代码页 - 请参阅 GitHub issue #7233

    【讨论】:

    • @JohnHubert,刚刚重新访问了这个答案,我已经对其进行了更新,以包括一个具体的解释,说明为什么-Raw 在管道到外部程序时会出现问题,特别是。 (我还添加了字符编码信息。)
    【解决方案2】:

    考虑在命令行中将文本文件作为参数传递给 Python 脚本使用。所有命令行参数(包括文件名)都存储在sys.argv 列表中:

    Python 脚本(在 evil_61.py 中)

    import sys
    
    txtfile = sys.argv[1]
    with open(txtfile) as f:
        content = f.readlines()
    

    PowerShell命令

    PS> python evil_61.py evilwords.txt
    

    【讨论】:

      【解决方案3】:

      因为 'redirection operator。

      退出 PowerShell 以获取 Python 内容,然后转至 cmd 或 cygwin。基于这个问题的上下文,我认为你没有理由使用escape characters 来使用 PowerShell 作为 CLI 来学习 Python。

      【讨论】:

      • &gt;not 被解释为重定向运算符:它被解释为“保留供将来使用” - 不多也不少。如果它 被解释为传统意义上的重定向操作符,事情就会按预期进行。转义字符在这里没有发挥作用,因为没有转义字符可以使&lt; 用作输入重定向。被选中使用 PowerShell 的人很可能做出了有意识的选择——与其建议他们使用不同的 shell,我建议向他们展示如何使他们的命令与他们选择的 shell 一起工作.
      猜你喜欢
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 2016-05-19
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多