2015-03-31 45 views
0

我是一個編寫我的第一個生產程序的python noobie。我的項目的要點是,我試圖導入一個CSV文件,按行分割成幾個不同的CSV文件(第10-100000行轉到第1個文件,100001-200000轉到第2個文件等),並在有一點我想刪除指定的列(特別是第5-400列,除以3後剩餘1,但我會在稍後添加)。現在,我只是想刪除第一行。試圖刪除Python 3中的特定列

import csv 
import itertools 
import ctypes 

signals = open('EPcathBIO_FILTERED.csv') 
csv_sig = csv.reader(signals) 

csv_head = open('EPcathBIO_HEAD.csv', 'w', newline='') 
cs_writer = csv.writer(csv_head, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL) 
for row in itertools.islice(csv_sig, 180): 
    print(row) 
    cs_writer.writerow(row) 
csv_head.close() 

csv_body = open('EPcathBIO_BODY.csv', 'w', newline='') 
cs_writer = csv.writer(csv_body, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL) 
for row in csv_sig: # itertools.islice(csv_sig, 0, 182): #restrict to start of body to the end 
    cs_writer.writerow(row) 

for E in csv_body: 
    del E[1] 
csv_body.close() 

signals.close() 

但我不斷收到以下錯誤:

Traceback (most recent call last): 
    File "C:\Users\Benjamin\Documents\JPH Lab\Data\2015_02_10_19_51_55\processor.py", line 22, in <module> 
for E in csv_body: 
io.UnsupportedOperation: not readable 

感謝您的幫助和耐心!

+0

當你打開一個文件時,結果是一個只能被讀取的流對象一次,像磁帶一樣。在這裏,您嘗試訪問已經達到「已結束」的流 – Finwood 2015-03-31 17:21:33

回答

0

您在w(寫入)模式下打開了csv_body。這意味着你只能寫入數據,你不能從中讀取數據。由於您無法從中讀取數據,因此無法對其進行迭代。您需要在rw(讀/寫)模式下打開它。您還需要通過查找將其倒回到文件的開頭。

但即使你這樣做,csv_body只是一個文本文件,它不知道如何刪除這樣的元素。

而且,在你的榜樣,csv_headcsv_body無論是從0行到180行我假設你想csv_head將高達180 csv_body爲180或更高。

你應該真的在使用pandas包。你的整個劇本將會是這樣的(假設你想要結束於180,身體開始於180):

import pandas as pd 

signals = pd.read_csv('EPcathBIO_FILTERED.csv') 
signals.iloc[180:].to_csv('EPcathBIO_HEAD.csv') 
signals.iloc[:180, 1:].to_csv('EPcathBIO_BODY.csv')