1. python写的ftp自动上传脚本,怎么判断重复的文件不重传呢size判断不够精确 有没有更好的方式跪求大神
这个没有特别准确的办法。你连SIZE检测也信不过。只有自己改程序了。
办法1:改写FTP程序,加一个hash确认。以前我这么做过。在python里可以轻松做一个FTP SERVER,加上自己做的MD5检测就可以了。
办法2:通过nc转发请求,在NC里设置一个检测。
办法3:如果文件不大,上传完再下载下来检测
办法4:采用自己传有的流水号,重新设置FTP SERVER,让它定期根据流水号,生成检验码,然后你在客户端定期下载这个文件。 这个方法过去在电信系统里经常使用。防出错效果很好。
2. python如何对一个txt文件中的数据遇到空行就分成一个txt全代码
#读取txt文件
#withopen('txt.txt',"r")asf:
#txt=f.read()
#假设txt文件内容为:
txt='''
aaaaaaaaa
bbbbbbbbb
ccccccccc
'''
arr=txt.split(' ')#用两个换行符格分割内容
print(arr)#得到:[' aaaaaaaaa','bbbbbbbbb ccccccccc ']
fori,vinenumerate(arr):#遍历arr每个元素生产一个文件
withopen(str(i)+'.txt','w')asf:
f.write(v)
#结果生产0.txt和1.txt两个文件
#0.txt内容: aaaaaaaaa
#1.txt内容:bbbbbbbbb ccccccccc
#里面的 是换行符打开文件看到的是换行的:
#bbbbbbbbb
#ccccccccc
3. [Xarray] 1. 数据结构
参考 Xarray官方文档 , Python气象数据处理进阶之Xarray(1):Xarray的数据结构
在Xarray中,数据是由结构和标签的,分为以下几种:
1.DataArray:
带冲正有标注或命名维度的多维数组。DataArray将metadata(例如:维名称,坐标和属性)添加到基础的 未标记 的数据结构,例如numpy和Dask数组。
2.Datasets:
具有类似字典结构的尺寸对其的DataArray对象的 集合 。因此,可以在单个DataArray的维度上执行的大多数操作都可以在Dataset上执行。
Dataset是多个DataArray的集合
3.Variable:
类似于NetCDF的变量。由dimensions,data和attributes组成。variable和numpy数组之间的主要功能闹毁区别在于,对variable的数字运算可以通过 维名称 实现数组广播。
通俗的讲,variables < DataArray < Dataset (<指包含于)。这种解释不完全正确,但是初学者可以这样理解。
Xarray通过对维命名的操作实现数据筛选和处理,实现数据的标记和命名通过以下几个定液判备义实现:
* Dimension : 每一轴的维名称(e.g.,('x','y','z'))。
* Coordinate : 坐标或刻度。类似于字典的序列,将每个点标记。比如说dimension是纬度,那么对应的coordinate就是纬度坐标(90°N,89°N,88°N……89°S,90°S)。
* Index : 索引号,也可以说是位置标号。a[0]代表a数组的一个数,0就是index。
可以看到,该文件是一个Datasets,里面含有变量:Data Variables,数据集的维度有经度纬度和时间,各自有各自的坐标Coordinates,同样数据集还有一些属性来表明数据集信息。
我们可以通过:
来分别查看数据集中包含的变量,维,坐标。
再比如NCEP的位势高度资料:
基本同上。
需要说明的是,ncl数据中存在short格式,在读取时需要使用short2flt()函数,但是在Python中不存在short格式,默认均为float,无需考虑这一点。
有时我们通过其他手段读取了相关数据,但是数据是np.array格式的,我们需要将其转换为DataArray,亦或我们需要输出一个NC文件,需要将计算后的数组转为DataArray格式,这就用到了创建的方法。
1.Data: 数据,可以是numpy ndarray,series,DataFrame,pandas.panel等格式
2.coords: 坐标列表或字典
如果是列表,则应为元组列表。其中第一个元素为dimension name,第二个元素是对应的坐标array_like对象。
用字典格式比较好
3.dims: 维名称列表
如果省略,并且coords是元组列表,则维度名称取自coords。
4.attrs: 属性
5.names: 变量名
以上,除了data外,都不是必须的。
创建示例如下:
上面提到,除了data以外,其他都是不必要的
如果是从一个DataFrame数据转化为DataArray的话(这种操作通常是为了将Pandas和Xarray联合使用):
会自动识别行列的名称和序号。
官方文档还有更复杂的例子,需要的话再去官网查看。
在创建了数据之后,我们同样可以使用相关的操作获取DataArray的各种信息:
如果想对DataArray的值修改可以通过以下两种方法:
两种结果是等价的,但官方只给出了第一种方法。
*通过指令 foo.rename('temperature') 改名,比如通过hgt计算得到了一个新变量,需要改名,就可以用这个指令。
在得到一个DataArray后,用于画图时,比如我们需要获取它的经度和纬度(在这里,刚刚的例子是时间和高度),那么可以直接通过
这两种方式取出坐标信息。
要修改或者删除某坐标信息的话,原理和修改数据是一样的:
官网给出一个以气候数据为例的Dataset结构:
<center>
</center>
一个数据集,包含了数据主体(Temperature,Precipitation),维度坐标(latitude,longitude)。
根据官网的例子,一个Dataset是这样创建的,实际上与DataArray类似:
实际上这个例子与我们通常接触的不太一样,因为大部分数据的lat和lon都是一维的。
对Dataset的操作和DataArray基本一致,不再重复。
4. python 中的"_,"问题
在python中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。python中的标识符是区分大小写的。
----这是知识背景------
但是通常python的变成习惯以下划线开头的标识符是有特殊意义的。以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入;以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如__init__()代表类的构造函数。
在交互模式下运行python时,一个下划线字符(_)是特殊标识符,它保留了表达式的最后一个计算结果。
>>> "hello"
'hello'
>>> _
'hello'
>>> 10+10
20
>>> _
20
在python中,函数、类、模块定义的第一段代码如果是字符串的话,就把它叫作文件字串,可通过__doc__属性访问。如:
def test():
"this is a document string"
return 100+1000
>>>print test.__doc__
this is a document string