我有一个csv文件包含每日降水量(每天253行和191列)所以一年我有191 * 365列。
我想提取第一天感兴趣的区域row 20
和column 40
的特定行和列的数据,2,3,4 ... 365 days
列之间的距离相同。
我是python中的新手,有什么方法可以提取数据并将其存储在某个行和列的新csv中一年?
感谢
答案 0 :(得分:0)
要从某个行和列获取值,您可以尝试使用这样的smth:
func controllerWillChangeContent(controller: NSFetchedResultsController) {
myTableView?.beginUpdates()
}
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
switch(type) {
case .Insert:
self.myTableView?.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Fade)
case .Delete:
self.myTableView?.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade)
case .Update:
self.configureCell((myTableView?.cellForRowAtIndexPath(indexPath!)), atIndexPath: indexPath!)
case .Move:
myTableView?.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade)
myTableView?.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Fade)
}
}
func configureCell(cell: UITableViewCell?,
atIndexPath indexPath: NSIndexPath) {
//YOUR CELL UPDATE CODE
}
func controllerDidChangeContent(controller: NSFetchedResultsController) {
myTableView?.endUpdates()
}
答案 1 :(得分:0)
除了提取数据外,您首先需要做的是重新排列数据。
现在,每天都会添加191个列。要做到这一点,需要解析整个文件(可能在内存中,每天都在增长数据),数据被添加到每行的末尾,所有内容都必须再次完全写入磁盘。
通常,要将数据添加到csv,会在文件末尾添加行。无需每次都解析和重写整个文件。
最重要的是,当列数越来越高时,大多数读取csv文件的软件都会出现问题。
因此,将每日数据添加为csv文件末尾的行会更好。
虽然我们正在考虑:假设253 x 191是某种网格,或者至少每个单元具有相同的数据类型,这将是二进制存储的理想选择(不是确定Python如何处理它。)
所有数据都可以以二进制形式存储,从而产生固定长度的字段/单元格。要访问字段,可以简单地计算它的位置,并且不需要每次都解析和转换所有数据。检索数据几乎是即时的。
答案 2 :(得分:0)
我已经设法在阅读了一些示例并尝试使用此脚本进行剪切
`import netCDF4 as nc
pixel = [[1,36,77],[2,37,77],[3,35,78],[4,36,78],[5,37,78],[6,38,78],[7,39,78],[8,40,78],[9,35,79],[10,36,79],[11,37,79],[12,38,79],[13,39,79],[14,40,79],[15,35,80],[16,36,80],[17,37,80],[18,38,80],[19,35,81],[20,36,81],[21,37,81],[22,36,82]]
print pixel
from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir('D:\RCP45\Hujan_Harian') if isfile(join('D:\RCP45\Hujan_Harian',f))]
print onlyfiles
folder = 'D:\RCP45\Hujan_Harian\\'
fout = open ("D:\My Documents\precipitation.txt", "w")
for j in range (0,len(onlyfiles)):
filename = onlyfiles[j]
print filename
tahun = filename[0:4]
print tahun
from scipy.io import netcdf
f1 = netcdf.netcdf_file(folder+filename,'r')
print (f1.variables)
jlh_hari = int(len(f1.variables['time_bnds'][:]))
print jlh_hari
output = []
for h in range (0,(jlh_hari)):
for i in range (0,22):
x=pixel[i][1]
y=pixel[i][2]
pr=f1.variables['pr'][h,x,y]
fout.write(str(pixel[i][0]) + ', , ' + str(tahun) + ', ' + str(pr) + '\n')
fout.write('\n')
print output`