2014-11-22 122 views
-2

確定這樣的文件包括:如何刪除文件中的行並將其移至其他文件?

apple,bot,cheese,-999 
tea,fire,water,1 
water,mountain,care,-999 

所以我要檢查,如果在文件1的行末有-999如果他們這樣做,刪除線,並傳送不進一個一個新文件。到目前爲止,我的功能有:

def clean(filename,cleanfile,value,position): 
filename.readline() 
for line in filename: 
    if line[position] != value: 
     cleanfile.write(line) 

值是-999和位置是3,我打開我的文件在我的主,並將其傳遞給函數,問題是,新的文件是空的。

+0

線是一個字符串。 'line [position]'是單個字符。 (假設'文件名'實際上是一個打開的文件,而不是文件名。) – 2014-11-22 00:06:42

+0

-999不在索引3中。你的意思是「最後」還是你想將行分成列並選擇哪一列用作過濾器? – tdelaney 2014-11-22 00:07:13

+0

我希望它成爲一個列,我會在逗號分割並做到這一點? – user3373402 2014-11-22 00:08:29

回答

0

試試這個:

def clean(filename,cleanfile,value,position): 
    for lines in filename.readlines(): 
     line = lines.strip().split(",") 
     if line[position] != value: 
      cleanfile.write(",".join(line) + "\n") 

clean(open("readFrom.txt", "r"), open("writeTo.txt", "w"), "-999", 3) 
+0

好吧,我試過你的它做的相反,它刪除除了以-999結尾的所有東西外,我希望刪除-999結尾的其餘部分,留下其餘的 – user3373402 2014-11-22 00:43:27

+0

好吧,我修正了它,我使== =!= – user3373402 2014-11-22 00:44:09

1

您可以使用csv模塊計算分割和連接逗號分隔值的詳細信息。

import csv 
def clean(filename,cleanfile,value,position): 
    with open(filename) as reader_fp, open(cleanfile, 'w') as writer_fp: 
     reader = csv.reader(reader_fp) 
     writer = csv.writer(writer_fp)   
     for row in reader: 
      if row[position] != value: 
       writer.writerow(row) 
+0

您是否測試了代碼? – 2014-11-22 00:14:51

+1

@HaiVu哎呀,剪切/粘貼錯誤。 – tdelaney 2014-11-22 00:15:24

+0

我是否需要使用csv ?,有沒有使用csv的另一種方法? – user3373402 2014-11-22 00:29:45

0
如果你知道的值總是在每行的末尾

,你可以嘗試:

def clean (file1, file2, value): 
    for line in file1 : 
     if line.strip().split(",")[-1] != value : 
      file2.write(line) 
    file1.close() 
    file2.close() 

clean(open("readFrom.txt", "r"), open("writeTo.txt", "w"), "-999") 
相關問題