【问题标题】:How to turn text file into python list form如何将文本文件转换为python列表形式
【发布时间】:2019-08-14 08:40:09
【问题描述】:

我正在尝试将文本文件中的数字列表转换为 python 列表形式。比如我想做

1
2
3
4
5

进入

[1,2,3,4,5]

我在另一篇使用 sed 的帖子中发现了一些几乎可以工作的东西。

sed '1s/^/[/;$!s/$/,/;$s/$/]/' file

但这并没有删除每个数字后的新行。如何修改此 sed 命令以使其执行我想要的操作。此外,还将感谢对 sed 命令的组件的解释。谢谢

【问题讨论】:

  • with open('file') as f:..data = f.read().strip().split();..nums = map(int, data) ?你为什么在这里使用sed
  • 您是想在 Python 中执行此操作,还是这主要是 sed 上的一个问题,而您只是因为格式而引用 Python?如果后者 - 除了sed 标签之外你不需要任何东西......如果前者 - 你不需要sed 标签......请考虑在您的帖子中添加edit澄清一下 - 谢谢。
  • 以防万一您需要它进行一些 Python 操作之外的操作 awk 'BEGIN{RS=ORS="";OFS="," ;printf "["} {$1=$1;print} END{print "]\n"}' file
  • 追加| tr -d '\n'?
  • 谢谢@Cyrus。这是一个很好的命令行答案。你应该让它成为一个实际的答案

标签: python list sed


【解决方案1】:

如果你想要使用python的列表,一个简单的实现是

with open('./num.txt') as f:
    num = [int(line) for line in f]

【讨论】:

  • 谢谢。我可能应该补充一点,这应该更像是一个 sed 练习,但感谢代码 sn-p
【解决方案2】:

您可以在执行替换之前先将所有行追加到模式空间中:

sed ':a;N;$!ba;s/\n/,/g;s/^/\[/;s/$/\]/' file

这个输出:

[1,2,3,4,5]

【讨论】:

  • 当我做 seq 5 | sed -z 's/^/[/; s/\n/,/g; s/,\?$/]\n/' 它似乎甚至没有改变输出。与 seq 5 相同
  • 那不是我的代码(那是 oguzismail 的代码)。请在此处运行演示:tio.run/##K05N0U3PK/3/3yrR2s9aRTEp0bpYPyZPX0c/…
【解决方案3】:

这可能对你有用(GNU sed):

sed '1h;1!H;$!d;x;s/\n/,/g;s/.*/[&]/' file

将第一行复制到保留空间,附加后续行的副本并删除原件。在文件末尾,交换到保留空间,用逗号替换换行符,并用方括号将剩余的字符串括起来。

【讨论】:

    【解决方案4】:

    使用 GNU sed for -z 一次读取整个文件:

    sed -z 's/\n/,/g; s/^/[/; s/,$/]\n/' file
    [1,2,3,4,5]
    

    在任何 UNIX 机器上的任何 shell 中使用任何 awk:

    $ awk '{printf "%s%s", (NR>1 ? "," : "["), $0} END{print "]"}' file
    [1,2,3,4,5]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      相关资源
      最近更新 更多