我是一个编写我的第一个生产计划的蟒蛇noobie。我的项目的要点是我尝试导入CSV,将其分成几行不同的CSV文件(行10-100000转到文件1,100001-200000转到文件2等)并且在某些时候我想删除指定的列(特别是列5-400,当除以3时,余数为1,但我稍后会添加该位)。现在,我只想删除第一行。
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 :(得分:0)
您在csv_body
(写入)模式下打开了w
。这意味着您只能向其写入数据,您无法从中读取数据。由于您无法从中读取数据,因此您无法对其进行迭代。您需要以rw
(读/写)模式打开它。您还需要通过搜索将其倒回到文件的开头。
但即使你这样做,csv_body
只是一个文本文件,它也不知道如何删除这样的元素。
此外,在您的示例中,csv_head
和csv_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')