【发布时间】:2018-10-29 16:35:24
【问题描述】:
我正在编写一个非常简单的 python 脚本来读取 CSV(没问题)并写入另一个 CSV(问题):
系统信息:
- Windows 10
- Powershell
- Python 3.6.5 :: Anaconda, Inc.
样本数据:Office Events
目的是根据条件过滤事件,并写入具有所需条件的另一个 CSV。
例如:
我想从此 CSV 中读取并写入注册(或第 4 列)大于 0 的事件(删除注册 = 0 的行)
# SCRIPT TO FILTER EVENTS TO BE PROCESSED
import os
import time
import shutil
import os.path
import fnmatch
import csv
import glob
import pandas
# Location of file containing ALL events
path = r'allEvents.csv'
# Writes to writer
writer = csv.writer(open(r'RegisteredEvents' + time.strftime("%m_%d_%Y-%I_%M_%S") + '.csv', "wb"))
writer.writerow(["Event Name", "Start Date", "End Date", "Registrations", "Total Revenue", "ID", "Status"])
#writer.writerow([r'Event Name', r'Start Date', r'End Date', r'Registrations', r'Total Revenue', r'ID', r'Status'])
#writer.writerow([b'Event Name', b'Start Date', b'End Date', b'Registrations', b'Total Revenue', b'ID', b'Status'])
def checkRegistrations(file):
reader = csv.reader(file)
data = list(reader)
for row in data:
#if row[3] > str(0):
if row[3] > int(0):
writer.writerow(([data]))
我继续得到的错误是:
writer.writerow(["Event Name", "Start Date", "End Date", "Registrations", "Total Revenue", "ID", "Status"])
TypeError: a bytes-like object is required, not 'str'
我尝试过使用各种注释掉的语句
例如:
- "" vs r"" vs r'' vs b''
if row[3] > int(0) **vs** if row[3] > str(0)
每次我执行我的脚本时,它都会创建文件..所以第一个 csv 写入器行工作(创建并打开文件)......第二行(写入标题)是出现错误的时候......
也许我因为 python 版本而混淆了语法,或者我滥用了 CSV 库,或者(很可能)我有无穷无尽的学习数据类型 IO 和转换......请有人帮忙!
我知道导入库过多——脚本来自另一个基本脚本,用于根据文件名将文件从一个位置移动到另一个位置,并为每个被移动的文件输出一个行计数器。 话虽如此,我可能不知道有任何缺失/需要的库
如果您有任何问题、疑虑或澄清,请告诉我 提前致谢!
【问题讨论】:
-
抱歉忘记添加最后一行代码来执行定义的函数(考虑到函数调用点之前发生的错误,这并不重要)** checkRegistrations(path)**
标签: csv python-3.6 writer