python或bash - 在行尾添加“行和”

时间:2009-11-06 17:04:25

标签: python linux bash

我的文本文件类似于

first line
line nr 2
line three

我想生成

"first line",
"line nr 2",
"line three",

我想知道如何在python中执行此操作,或者如果它更容易/更快,可能在bash中执行此操作。我知道打开文件有不同的代码,并且在python(?)中只读取一行不同但我不确定在这种情况下使用哪个选项,更重要的是,如何添加这些字符。任何建议都会有所帮助。

9 个答案:

答案 0 :(得分:8)

sed 's/.*/"&",/'

答案 1 :(得分:6)

供参考,以防有人想用python做同样的事情。有一个方便的模块fileinput可以像这样使用:

import fileinput
import sys, os

for line in fileinput.input(inplace=True):
    sys.stdout.write('"%s",%s' % (line.rstrip(os.linesep), os.linesep))

然后将其作为脚本运行:

python myscript.py file1 file2 file3

这会为你改变文件。

答案 2 :(得分:6)

成为一名真正的unix极客:使用sed!

sed 's/^/"/; s/$/",/;' < your_text_file

如果要使用反斜杠转义现有双引号,请使用's/"/\\"/g; s/^/"/; s/$/",/;'作为模式。

sed非常适合此类任务。查看一个可笑的长list of examples

答案 3 :(得分:5)

无需为此任务构造正则表达式(使用反向引用)。它是一个昂贵的操作,因为你不会改变行中的东西。最简单的方法就是将它们打印出来。

    awk '{print "\042"$0"\042,"}' file 

对大文件操作的结果:

$ head -5 file
this is line
this is line
this is line
this is line
this is line
$ wc -l < file
9545088

$ time  awk '{print "\042"$0"\042,"}' file  >/dev/null

real    0m15.574s
user    0m15.327s
sys     0m0.172s

$ time sed 's/.*/"&",/' file > /dev/null

real    0m31.717s
user    0m31.465s
sys     0m0.157s

$ time perl -p -e 's/^(.*)$/\"$1\",/g'  file >/dev/null

real    0m36.576s
user    0m36.006s
sys     0m0.360s

答案 4 :(得分:4)

一些简单的方法......

一个简单的perl oneliner:

perl -pi -e 's/^(.*)$/\"$1\",/g' /path/to/your/file

要解释一下,正则表达式^(.*)$会抓住行的开头((.*))和行尾(^)之间的所有内容($) ),然后使用$1匹配组变量用引号和逗号重建它。

答案 5 :(得分:1)

在Bash中:

while read line
    do
    echo "\"${line}\","
done < inputfile

答案 6 :(得分:1)

的Python

for line in open("file"):
  line=line.strip()
  print '"%s",'  % line

答案 7 :(得分:0)

sh + awk在这里也很不错......

!/bin/sh
for FILE in "$@"
do
   awk '{print "\" $0 "\","}' < $FILE > $FILE.tmp
   mv $FILE.tmp $FILE
done

答案 8 :(得分:0)

在vi中:

:%s/^\(.*\)$/"\1",/g