我使用庞大的数据集,有时需要我对具有数字的列进行加减。我能够提出一个可以为我完成工作的代码。让我们以下面的示例为例:
public class DaySliderFragmentAdapter extends FragmentStatePagerAdapter {
private static final int NUM_PAGES = 2;
public DaySliderFragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return new DaySliderFragment();
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
下面的代码如果在flag_s字段中找到“ B”,则会减去“金额”字段:
for(int i=1; i<=10;i++)
{
if($request->input('time'.i)!=null && $request->input('OT_Date'.i)!=null)
{
$Date = array('' => , );
$num++;
}
}
现在我面临的问题是:有时会有多个CSV文件。我们通常需要附加它们,然后在它们上运行代码。假设我得到一个csv文件A,然后得到一个csv文件B;我需要附加两个文件,然后运行总和代码。如果我们以以下示例为例:
id,flag_s,amount
1,A,10
2,B,20
3,A,30
Python抛出以下错误:
import csv
with open("MOCK_DATA with text qualifier.csv","r+",encoding='utf8') as fin:
headerline = fin.readline()
flag = None
debit = 0
value = 0
for row in csv.reader(fin,delimiter=","):
value =row[2].strip()
value = float(row[2]) if value else 0.0
flag = row[1].strip()
if flag == "B":
debit-=value
else:
debit+=value
print (debit)
是否可以解决这个问题?
答案 0 :(得分:1)
您应该使用try/except
语句:
try:
value = float(row[2]) if value else 0.0
except ValueError: # A header, perhaps
continue # Skip the row
答案 1 :(得分:0)
此处,此代码适用于您的用例。
import csv
with open("MOCK_DATA with text qualifier.csv","r+",encoding='utf8') as fin:
headerline = fin.readline()
flag = None
debit = 0
value = 0
for row in csv.reader(fin, delimiter=","):
try:
value = float(row[2].strip())
except ValueError:
value = 0.0
flag = row[1].strip()
if flag == "B":
debit-=value
else:
debit+=value
print (debit)