更新时间:2023-01-09 18:31:41
您可以思考:
import csv
$ b b def fitem(item):
item = item.strip()
try:
item = float(item)
except ValueError:
pass
返回项
with open('/ tmp / test.csv','r')as csvin:
reader = csv.DictReader(csvin)
data = {k。阅读器中的行:
对于line.items()中的k,v:
:
k = k.strip()
data [k] .append(fitem(v))
打印数据
列印:
{'Price':[6.05,8.05, 6.54,6.05,7.05,7.45,5.45,6.05,6.43,7.05,8.05,3.05],
'类型':['orange','orange','orange','pear','pear' '品牌','品牌','品牌','品牌','品牌','品牌','品牌' '品牌2','品牌3','品牌1','品牌2','品牌3','品牌4','品牌1','品牌2'],
' 4.2,3.2,3.6,3.9,2.7,3.2,3.5,3.9,4.2,2.2]}
如果你想要csv文件按行按元组:
import csv
with open('/ tmp / test .csv')as f:
data = [tuple(line)for line in csv.reader(f)]
打印数据
#[('Brand' Price','Weight','Type'),('brand1','6.05','3.2','orange'),('brand2','8.05','5.2','orange'品牌3','6.54','4.2','橙'),('brand1','6.05','3.2','pear'),'brand2','7.05' ('brand1','5.45','2.7','apple'),('brand2','6.05','3.2' ('brand4','7.05','3.9','apple'),('brand3','6.43','3.5' ,'4.2','plum'),('brand2','3.05','2.2','plum')]
I am to take a csv with 4 columns: brand, price, weight, and type.
The types are orange, apple, pear, plum.
Parameters: I need to select the most possible weight, but by selecting 1 orange, 2 pears, 3 apples, and 1 plum by not exceeding as $20 budget. I cannot repeat brands of the same fruit (like selecting the same brand of apple 3 times, etc).
I can open and read the csv file through Python, but I'm not sure how to create a dictionary or list of tuples from the csv file?
For more clarity, here's an idea of the data.
Brand, Price, Weight, Type
brand1, 6.05, 3.2, orange
brand2, 8.05, 5.2, orange
brand3, 6.54, 4.2, orange
brand1, 6.05, 3.2, pear
brand2, 7.05, 3.6, pear
brand3, 7.45, 3.9, pear
brand1, 5.45, 2.7, apple
brand2, 6.05, 3.2, apple
brand3, 6.43, 3.5, apple
brand4, 7.05, 3.9, apple
brand1, 8.05, 4.2, plum
brand2, 3.05, 2.2, plum
Here's all I have right now:
import csv
test_file = 'testallpos.csv'
csv_file = csv.DictReader(open(test_file, 'rb'), ["brand"], ["price"], ["weight"], ["type"])
You can ponder this:
import csv
def fitem(item):
item=item.strip()
try:
item=float(item)
except ValueError:
pass
return item
with open('/tmp/test.csv', 'r') as csvin:
reader=csv.DictReader(csvin)
data={k.strip():[fitem(v)] for k,v in reader.next().items()}
for line in reader:
for k,v in line.items():
k=k.strip()
data[k].append(fitem(v))
print data
Prints:
{'Price': [6.05, 8.05, 6.54, 6.05, 7.05, 7.45, 5.45, 6.05, 6.43, 7.05, 8.05, 3.05],
'Type': ['orange', 'orange', 'orange', 'pear', 'pear', 'pear', 'apple', 'apple', 'apple', 'apple', 'plum', 'plum'],
'Brand': ['brand1', 'brand2', 'brand3', 'brand1', 'brand2', 'brand3', 'brand1', 'brand2', 'brand3', 'brand4', 'brand1', 'brand2'],
'Weight': [3.2, 5.2, 4.2, 3.2, 3.6, 3.9, 2.7, 3.2, 3.5, 3.9, 4.2, 2.2]}
If you want the csv file literally as tuples by rows:
import csv
with open('/tmp/test.csv') as f:
data=[tuple(line) for line in csv.reader(f)]
print data
# [('Brand', ' Price', ' Weight', ' Type'), ('brand1', ' 6.05', ' 3.2', ' orange'), ('brand2', ' 8.05', ' 5.2', ' orange'), ('brand3', ' 6.54', ' 4.2', ' orange'), ('brand1', ' 6.05', ' 3.2', ' pear'), ('brand2', ' 7.05', ' 3.6', ' pear'), ('brand3', ' 7.45', ' 3.9', ' pear'), ('brand1', ' 5.45', ' 2.7', ' apple'), ('brand2', ' 6.05', ' 3.2', ' apple'), ('brand3', ' 6.43', ' 3.5', ' apple'), ('brand4', ' 7.05', ' 3.9', ' apple'), ('brand1', ' 8.05', ' 4.2', ' plum'), ('brand2', ' 3.05', ' 2.2', ' plum')]