[英]Reading the CSV file and extract the desired amount of data using python
我從csv文件中提取了數據,使用以下代碼從特定的行和列開始:
def csvread(csvpath, filtered_dict):
rdr = csv.reader(open(csvpath, 'rb'))
columns = [{key:row[pos[0][1]] for key,pos in filtered_dict.items()} for row in rdr]
# finally trim to desired row startpoints:
data = {key:[col[key] for col in columns[pos[0][0]:]] for key,pos in filtered_dict.items()}
return zip(*data.values())
filtered_dict看起來像這樣:
{'Date': [(21, 5)], 'Rate': [(21, 4)], 'Item': [(21, 2)]}
但它會將數據提取到csv文件的末尾,這會導致處理所需數據的問題。 像這樣:
[('Dates', 'Rates', 'Items'),
('2013/03/07', '$114', 'Tissot'),
('2013/03/07', '$140', 'Adidas'),
('2013/03/07', '$344', 'Nike'),
('', '', ''),
('', '', ''),
('','The rate for EVERY item is FIXED', 'No RETURN or EXCHANGE!')]
現在我想要的是在函數找到所有3個字段EMPTY時暫停進程。 並且必須如下結果:
[('Dates', 'Rates', 'Items'),
('2013/03/07', '$114', 'Tissot'),
('2013/03/07', '$140', 'Adidas'),
('2013/03/07', '$344', 'Nike')]
在此先感謝您的幫助。
您可以檢查字符串列表中的所有元素是否具有零長度,方法是在它們全部連接在一起時測試它們的長度是否為零。 這似乎給你你想要的東西:
di = [('Dates', 'Rates', 'Items'),
('2013/03/07', '$114', 'Tissot'),
('2013/03/07', '$140', 'Adidas'),
('2013/03/07', '$344', 'Nike'),
('', '', ''),
('', '', ''),
('','The rate for EVERY item is FIXED', 'No RETURN or EXCHANGE!')]
d2 = []
for x in di:
if len(''.join(x)) == 0:
break
else:
d2.append(x)
print (d2)
......哪個輸出:
[('Dates', 'Rates', 'Items'), ('2013/03/07', '$114', 'Tissot'), ('2013/03/07', '
$140', 'Adidas'), ('2013/03/07', '$344', 'Nike')]
先前建議的答案的一個問題是, if len(''.join(x)) == 0:
在最常見的情況下測試會做很多工作加入字符串,並且僅進行少量工作對於終止案例,所有字符串都是空的。
最好安排事情為最常見的情況做一些工作,其中元組的第一個字符串不為空,或者第二個字符串不為空,或者第三個字符串不為空。 這可以使用內置函數any()
進行測試,它會在找到非空字符串后立即進行短路(退出測試),因此它可以減少工作量並且啟動代碼更清晰。
di = [('Dates', 'Rates', 'Items'),
('2013/03/07', '$114', 'Tissot'),
('2013/03/07', '$140', 'Adidas'),
('2013/03/07', '$344', 'Nike'),
('', '', ''),
('', '', ''),
('','The rate for EVERY item is FIXED', 'No RETURN or EXCHANGE!')]
d2 = []
for x in di:
if any(x):
d2.append(x)
else:
break
print (d2)
輸出:
[('Dates', 'Rates', 'Items'),
('2013/03/07', '$114', 'Tissot'),
('2013/03/07', '$140', 'Adidas'),
('2013/03/07', '$344', 'Nike')]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.