所以我目前得到的.csv文件看起来像这样:
HostType,Number
Windows_Desktop,84
Linux_Desktop,12
Windows_Desktop,60
Linux_Desktop,7
我正在尝试编写一个基于总值执行函数的脚本。所以我有两个全局变量:
WINDOWS = 0
LINUX = 0
我正在努力使该函数将两个Window_Desktop数字加在一起,并将Linux_Desktop数字加在一起。所以像..
def count_function():
global WINDOWS
global LINUX
count_file = open('counts.csv', 'rb')
reader = csv.reader(count_file)
WINDOWS = float(row[2]) + float(otherrow[2])
LINUX = float(row[2]) + float(otherrow[2])
(我知道这是非常错误的语法,只是我想弄清楚的一个简短例子) 但我不知道如何指定我想要添加的列和行。他们总是在同一个地方。 Windows总是2和4,Linux总是在3和5中。所以我不需要以任何方式对它们进行正则表达。我只想弄清楚如何进行第2行第2列+第4行第2列。
基本上,我最终会尝试做类似的事情:
if WINDOWS < 80
some_function()
虽然我已经找到了这个部分,但是我把这些数字加起来,即使我猛击了多少次,我也似乎无法弄明白。
答案 0 :(得分:3)
您需要通过分析第一列的内容来确定您要收集的东西的类型。由于您要收集Windows
和Linux
总计,因此您可以使用字典来收集这些数据。
试试这个版本:
import csv
from collections import defaultdict
data = defaultdict(float) # this just means, the default value of a key
# that doesn't exit is a float
with open('yourfile.csv') as f:
reader = csv.reader(f)
next(f) # This will skip the header
for row in reader:
data[row[0].split('_')[0].strip()] += float(row[1])
if data['Windows'] < 80:
print('Do stuff')
for key, value in data.iteritems():
print('Value for {} is {}'.format(key, value))
答案 1 :(得分:1)
我强烈建议您使用Pandas package。它对于使用csv文件非常有用。
import pandas as pd
df = pd.read_csv("/Users/daddy30000/Dropbox/Stackoverflow/16_06_20_example.csv")
windows = df[df['HostType'] == 'Windows_Desktop'].sum()[1]
linux = df[df['HostType'] == 'Linux_Desktop'].sum()[1]
print windows
>>> 144
print linux
>>> 19
请注意,我假设您的所有Windows行都具有相同的拼写“Windows_Desktop”。您在示例中使用了两种不同的拼写。
答案 2 :(得分:1)
你可以这样做的一种方式是:
with open("/tmp/foo.txt", 'r') as input_file:
counts = {}
for line in input_file:
split_line = line.split(",")
device = split_line[0]
counts[device] = int(split_line[1]) + (counts.get(device) or 0)
print counts ## prints {'Windows_Desktop': 144, 'Linux_Desktop': 19}
有很多方法,但这个方法不需要导入或下载任何新的Python
答案 3 :(得分:1)
对于小型数据集,我将整个内容读入内存并使用索引(与您的略有不同)直接访问正确的行和列。我也认为不需要使用global
变量(或者您使用float
代替int
的原因):
import csv
def count_desktops(filename):
with open(filename, 'rb') as count_file:
data = list(csv.reader(count_file))
windows = float(data[1][1]) + float(data[3][1])
linux = float(data[2][1]) + float(data[4][1])
return windows, linux
windows, linux = count_desktops('counts.csv')
if windows < 80:
some_function()