我想按公司名稱總結金額,但公司名稱的格式通常是不同的。如Apple Inc有時是蘋果電腦,Apple Inc. 另外..我不知道如何我可以處理「標題」Python CSV和SUM
我的文件格式是CSV。
company amount
a 20
b 10
A' 30
bb 20
我想這樣做:
line = readline() if line=='':
break
if 'Apple' in line:
sum(amount)
我想按公司名稱總結金額,但公司名稱的格式通常是不同的。如Apple Inc有時是蘋果電腦,Apple Inc. 另外..我不知道如何我可以處理「標題」Python CSV和SUM
我的文件格式是CSV。
company amount
a 20
b 10
A' 30
bb 20
我想這樣做:
line = readline() if line=='':
break
if 'Apple' in line:
sum(amount)
你將需要地圖不管怎樣,名稱的變化要麼通過分別合併每個名稱並手動合併,要麼先製作一個字典,以識別每個公司使用的所有別名。 if 'Apple' in line:
失敗很難,因爲它無法將不同公司的金額混合在一起。
Company = {"Apple": 1, "Apple Computer": 1, "AAPL": 1, "Apple, Inc": 1,
"Apple Vacations": 2, "Applebee's Restaurant": 3 }
sum[Company[name]] += amount
編輯2:如果你不知道所有事先的公司名稱,那麼你可以做的最好的是保持包含在輸入文件中的唯一名稱的軌道,並決定是否將它們合併後:
Company = {}
for <name, amount> in file: # pseudo-code for reading and parsing the input
if name in Company:
Company[name] += amount
else:
Company[name] = amount
非常感謝你!文件是這樣的:公司,金額蘋果,300 Apple.inc,500蘋果電腦,1000 aa,750 bb,250 – user976856
,但我不能做清單,因爲你已經做了... – user976856
如果你事先不知道所有的名字,那麼您需要跟蹤輸入中包含的每個唯一名稱。如果你的輸入是Apple 10,Apple 20,Applebees 75,那麼你的輸出將有2個公司:Apple 30,Applebees 75.你必須決定是否將30和75加在一起作爲一個公司(就像蘋果公司一樣和蘋果電腦),或將它們分開成兩個不同的公司。 – Dave
你的數據不是真正的CSV格式。明顯的列不會被逗號,標籤,甚至單個空格分開。有時會有多個空格...如果這是一個空格分隔值文件,則每個空格都會指示一個新列。多個空格意味着你每行有兩個以上的列。
這個細節很重要,因爲CSV文件很容易被csv module解析。但由於這不是真正的CSV文件,我們不能使用csv模塊。
假設有總是應該用空格隔開只是兩列,最後一列代表數字量(除了第一個標題行):
total=0
with open('data.csv','r') as f:
next(f) # skip the first (header) line
for line in f:
company,amount=line.rsplit(' ',1)
amount=float(amount)
if 'Apple' in company:
total+=amount
print(total)
謝謝sooo多!但Python說「空在字符串」我不知道.. ohh – user976856
我的意思是浮空() – user976856
您應該發佈CSV文件的前幾行 – Triptych