first line
line nr 2
line three
等
文本文件,我想生成
"first line",
"line nr 2",
"line three",
我想知道如何在Python中或者在bash中做到這一點,如果它更容易/更快。我知道有不同的代碼打開文件和不同的只讀一行python(?),但我不知道在這種情況下使用哪個選項,更重要的是,如何添加這些字符。任何建議都會有幫助。
first line
line nr 2
line three
等
文本文件,我想生成
"first line",
"line nr 2",
"line three",
我想知道如何在Python中或者在bash中做到這一點,如果它更容易/更快。我知道有不同的代碼打開文件和不同的只讀一行python(?),但我不知道在這種情況下使用哪個選項,更重要的是,如何添加這些字符。任何建議都會有幫助。
一些簡單的方法來做到這一點...
一個簡單的Perl oneliner:
perl -pi -e 's/^(.*)$/\"$1\",/g' /path/to/your/file
要解釋一下,正則表達式^(.*)$
抓住的開始之間的一切(的(.*)
) (^
)和行末($
),然後使用$1
匹配組變量使用引號和逗號重新構建它。
供參考,以防有人想用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
,這將改變文件就地爲您服務。
這就是精神,爲什麼在使用python的時候使用gnu! +1非常方便的文件輸入模塊。 – RedGlyph 2009-11-06 17:22:39
是一個真正的unix怪胎:使用sed!
sed 's/^/"/; s/$/",/;' < your_text_file
如果你想逃避現有的雙引號反斜槓,使用's/"/\\"/g; s/^/"/; s/$/",/;'
爲圖案。
sed非常適合這種類型的任務。檢查一個可笑的長list of examples。
不需要重定向,'sed'接受文件名作爲參數。 – 2009-11-06 17:53:26
sed 's/.*/"&",/'
我想你想在引號後面移動逗號;除此之外,整潔的答案! – 2009-11-06 20:23:14
'sed's /.*/"&",//'input_file | xclip' – jfs 2009-11-07 00:11:18
SH + AWK很不錯這裏太...
!/bin/sh
for FILE in "[email protected]"
do
awk '{print "\" $0 "\","}' < $FILE > $FILE.tmp
mv $FILE.tmp $FILE
done
'awk'將接受輸入文件作爲命令行參數而不進行重定向。 – 2009-11-06 18:05:55
在bash:
while read line
do
echo "\"${line}\","
done < inputfile
沒有必要構建正則表達式(與逆向引用)完成這個任務。這是一項昂貴的操作,因爲你不會改變線路中的某些東西。最簡單的方法就是將它們打印出來。
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
在六:
:%s/^\(.*\)$/"\1",/g
的Python
for line in open("file"):
line=line.strip()
print '"%s",' % line
你要什麼與輸出呢?把它放在編程語言的列表變量中?將其打印到屏幕上?把它寫回文件? – oggy 2009-11-06 17:08:47
要麼回寫到文件,要麼打印到屏幕......我以後想要複製並粘貼到其他地方,所以回寫到同一個文件或打印到screem都沒有問題,只要我可以稍後有效地複製和粘貼它'手動' – Phil 2009-11-06 17:12:57