【发布时间】:2013-05-23 12:25:56
【问题描述】:
我有一个文件,我正在尝试使用 Python 中的数据填充第二个文件。在填充时,我正在应用一些 if 语句来操作第二个文件中的一列。
我想使用这些 if 语句执行的操作:检查文件中的第 31 列,如果其值为 0,则在第 32 列返回 0 值,如果其值为空白,则返回 2 值第 32 列和其他所有非零和非空白值在第 32 列返回 1 值。
with open('DE_Combined_' + time.strftime("%Y-%m-%d")+".csv", "rb") as in_file, open('DE_Combined_PD_' + time.strftime("%Y-%m-%d")+".csv", "wb") as out_file:
reader = csv.reader(in_file)
writer = csv.writer(out_file)
headers = next(reader, None) # returns the headers or `None` if the input is empty
if headers:
writer.writerow(headers)
for row in reader:
if row[30] != 0:
row[31] = 1
else:
row[31] = 0
if row[30] == "":
row[31] = 2
writer.writerow(row)
这似乎是一个非常简单的问题,但我的输出文件给了我错误的结果。它在第 32 列中具有 1 值,在第 31 列中具有 0 值。两列中都应该是0。尽管2 值与第 31 列中的blank 值相对。
请帮助我解决这个问题,因为在我多次尝试发现我使用的 if 语句的逻辑有问题之后,我现在一无所知。
实际 O/P 的片段:(两行中的最后 2 个条目是相关的列)
05/23/2013 May 2013 2013 4 2 Thursday UK O2 £ NOKIA 100 NOKIA 100 Smartphone Symbian NA 9.99 N Pay & Go Pay & Go 0.64222 0 1
05/23/2013 May 2013 2013 4 2 Thursday UK O2 £ NOKIA 100 NOKIA 100 Smartphone Symbian NA Pink 9.99 N Pay & Go Pay & Go 0.64222 0 1
I/P Snippet:(前 2 行)(最后 2 列是相关列)
Date,Month,Fiscal_Year,Calendar_Year,FY_Quarter,CY_Quarter,Day_of_Week,Geography,MO,Currency,Device_OEM,Device_Name,GDN,Device_Type,Device_OS,Device_Franchise,Device_Color,Device_Storage_in_GB,Device_Price,Device_Monthly_Price,Additional,Device_Refurb,Plan_COMPARISON,Plan_Name,Plan_Contract_Length,Plan_Monthly_Price,Plan_Data_in_GB,Plan_Minutes,Plan_Texts,Exchange_Rate_vs_1USD,Difference,Difference_Flag
05/23/2013,May,2013,2013,4,2,Thursday,UK,O2,£,NOKIA,100,NOKIA 100,Smartphone,Symbian,NA,,,9.99,,,N,,Pay & Go,Pay & Go,,,,,0.64222,0.0,
05/23/2013,May,2013,2013,4,2,Thursday,UK,O2,£,NOKIA,100,NOKIA 100,Smartphone,Symbian,NA,Pink,,9.99,,,N,,Pay & Go,Pay & Go,,,,,0.64222,0.0,
【问题讨论】:
-
在 for 循环之后添加一个
print row,它看起来像您期望的那样吗?或使用实际输入更新您的问题。现在我们只能猜测...... -
您是否考虑过拆分读写功能?首先读取输入 csv,使用要写入的数据填充列表,根据需要进行操作,然后写入输出文件。我在想
row[30] != 0和row[31] = 1之间发生了什么事 -
@multiphrenic 你能帮我设计那种方法吗?我对编程很陌生
-
O/P部分包含 28 和 29 列。那部分是输入还是输出?我们需要输入才能帮助您... -
它看起来像 28 或 29,因为行中存在空列。
标签: python if-statement python-2.7 for-loop with-statement