我有一张这种格式的Excel表格:
from amount to
314 $470.21 275
12 $1,788.98 149
316 $2,949.53 417
5 $2,193.48 454
198 $1,402.76 371
82 $1,212.14 420
222 $1,167.72 396
并使用for循环渲染所有csv数据:
import csv
def csv_data(path):
with open(path) as csv_file:
readCSV = csv.DictReader(csv_file)
for line in readCSV:
col_from = line['from']
col_to = line['to']
col_ammount = line['amount']
print(col_from, col_amount, col_to)
csv_data('transactions.csv')
例如在“from column”中我发现值314现在如何检查“到列”的所有值,该值是否存在。实际上我想计算所有帐号的当前余额。
如何在for循环中正确添加条件?
答案 0 :(得分:0)
我给你的是这样的......
for line in readCSV:
if line['form']:
#do something if "from" exist
else:
#do something if "from" do not exit
if line['to']:
# do something if "to" exist
else:
# do something if "to" do not exit
if line['amount']:
#do something if "amount" exist
else:
#do something if "amount" do not exist
答案 1 :(得分:0)
我认为您的主要问题是您一遍又一遍地覆盖col_from
,col_to
和col_amount
列表。从循环中打印值可能会让您误以为所有值都将存储在该列表中。尝试并在for循环外调用print(col_from, col_amount, col_to)
,您将只获得最后一个元素。更好的方法是创建空列表和append
项目。
其次我认为你应该介意int和float的数据格式,但csv.DictReader
将返回矩阵中所有元素的字符串。
然后,检查col_from
的{{1}}值是否也出现在col_to
中,这很容易通过列表理解来完成。您可以为条件适用的所有行创建一个包含“True”的列表,如果不符合,则为“False”(所有样本数据都是如此)。
接近您的解决方案的建议是:
import csv
def csv_data(path):
with open(path) as csv_file:
readCSV = csv.DictReader(csv_file, delimiter=";", quoting=csv.QUOTE_NONE) # supposed that your delimiter is ";", otherwise use , or \tab
col_from, col_to, col_amount = [], [], [] # initialize empty lists
for line in readCSV: # append entries to your lists
col_from.append(int(line['from']))
col_to.append(int(line['to']))
col_amount.append(float(line['amount']))
bool_list = [True if col_from[i] in col_to else False for i in range(len(col_from))] # A list with Trues and Falses
return bool_list
print csv_data('transactions.csv')
# out: [False, False, False, False, False, False, False]
答案 2 :(得分:0)
假设您已成功存储来自'的值。和'来自'列表中的列,您可以在2个列表上执行交集操作,以获取列表中存在的所有常用值。
col_from = [314, 12, 316, 5, 198, 82, 222]
col_to = [275, 149, 417, 454, 371, 420, 396]
intersection = list(set(col_from) & set(col_to))
现在intersection
应该包含列表中的所有公共值,在这种情况下将是一个空列表。您也可以通过稍微修改来搜索特定值
list(set([314]) & set(col_to))