2013-10-15 25 views
-2

我已經編寫了一個小腳本來通過並移除哈希標記和所有整數字符串。下面是數據:用Python解析字符後的字符串中的所有整數

Test #456 
Test #783 
Test #990 
Test #123 
Test #560 
Test #983 
Test #195 

的數據是CSV格式和我想要的結果遷移到另一個CSV(雖然我接受更好的想法)。這裏是我寫的代碼:

reader = open('testin.csv', "r") 
lines = reader.read().split('#'[0].rstrip() + '/n') 
reader.close() 

writer = open('testout.csv', "w") 
for line in set(lines): 
    writer.write(line + "\n") 
writer.close() 

print "Complete" 

該腳本只是移動數據不變。

+0

''/ n'' v/s''\ n'' ?? – karthikr

+0

''#'[0] =='#'' – SethMMorton

+0

這不是一種csv格式。 CSV代表「逗號分隔值」:每行有多個值,用分隔符分隔(通常是逗號,因此是名稱)。 – abarnert

回答

0

只需使用正則表達式替換:

import re 

with open('testin.csv', 'r') as reader: 
    lines = [re.sub(r' *#\d+', '', line.strip()) for line in reader] 

with open('testout.csv', 'w') as writer: 
    writer.write('\n'.join(lines)) 
+0

這就是獾隊友,歡呼! – ManicMojoMan

0

我想你想以下幾點:

with open('testin.csv) as inf, open('testout.csv', 'w') as outf: 
    for line in inf: 
     parts = line.split('#') 
     leftpart = parts[0].rstrip() 
     outf.write(leftpart + '\n') 

你要分割每行,而不是整個文件。因爲'#'[0]只是'#',所以你必須在分割結果上取[0],而不是在你傳給它的'#'上。你想調用rstrip的結果。如果在一行中理解所有內容太複雜,請將其寫在多行上。

這可能不是你想要的,因爲你一直在談論CSV文件,每行有多個值,而且你還談論解析整數而不是忽略它們。因此,也許你想這樣的:

import csv 
with open('testin.csv) as inf, open('testout.csv', 'w') as outf: 
    w = csv.writer(outf) 
    for line in inf: 
     parts = line.split('#') 
     leftpart = parts[0].rstrip() 
     rightpart = parts[1].rstrip() 
     intvalue = int(rightpart) 
     # do something with intvalue? 
     w.writerow(leftpart, str(intvalue)) 

這是一個有點傻 - 我只是解析整數把它右後衛到相同的字符串,最終你可以只更換各做同樣的事情「 #'與','。但是它希望給你一個關於如何編寫你實際想寫的代碼的想法。