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