2015-07-12 25 views
0

我想從.csv文件中提取特定部分。但是當我在得到一個奇怪的輸出之前grep'ed我調用str(extractOut)。 .csv文件的內容是這樣的:如何提取csv文件的一部分,從元組到字符串?

example,example,TTT,1234,12345678,0 
... 

要提取的第三部分(「TTT」)我用grep:

extract = subprocess.Popen("grep -oP 'TTT,\K[^,]*(?=,)' example.csv | sed -n 1p", shell=True, stdout=PIPE) 
extractOut = extract.communicate() 

然後我用str()之前將輸出轉換爲描述到一個字符串。 但是,當我把它打印出來,我得到以下幾點:

(´TTT\n´, ´´) 

我只想明文「TTT」,也許我可以用一種變通方法,只是削減2個第一字符和八最後。 我怎樣才能獲得明文?

+1

爲什麼不使用python csv reader? https://docs.python.org/2/library/csv.html –

+0

你的預期輸出是什麼?你不需要grep ommand。 –

+0

'str(tuple).replace(「\ n」,「」)''並且寫一個函數來處理任何非字母字符。我可以寫一個函數,如果你需要 – ytpillai

回答

1

這是從csv中提取事物的一種難看的方式,爲什麼不使用允許更優雅的解決方案的現有工具?

例如:

import csv 

with open('example.csv') as csvfile: 
    data_reader = csv.reader(csvfile, delimiter=',') 
    for row in data_reader: 
     print(row[2]) 

將打印TTT

+0

啊差點忘了我的壞。我想我還是個新手。一個問題,我在我的CVS文件中有多行。如何指定要打印的行和行? – Nroh

+0

@Nroh只有當計數器達到您想要的數量時,您才需要計算已處理的行數並運行您的收集。你不能跳到特定的行,因爲這需要將整個CSV加載到內存中,而使用較大的文件將會是非常愚蠢的事情。 –

0

有工具,這一點,即:read.csv()。在這裏,我複製了三行,並將它們保存到example.csv

> tmp <- read.csv("~/Desktop/example.csv", header = FALSE) 
> tmp 
     V1  V2 V3 V4  V5 V6 
1 example example TTT 1234 12345678 0 
2 example example TTT 1234 12345678 0 
3 example example TTT 1234 12345678 0 
> tmp$V3 
[1] TTT TTT TTT 
Levels: TTT