1. 程式人生 > >python檔案批處理小程式

python檔案批處理小程式

因為實驗上有些資料要統計,所以需要用程式來過濾下資料,python懂一點點,喜歡它的簡潔。這裡用python將資料夾內的檔案資訊彙總到一個txt檔案。

下面是一個XRD實驗資料的尋峰報告,我想找40,58,和73左右的峰,記錄它的具體角度和峰的半高寬。

Peak Search Report (13 Peaks, Max P/N = 56.8)
[2018A1.mdi] DX-2700 SSC 40kV/30mA Slit:1deg&1deg&.2mm Monochromator: ON Ts-Td
PEAK: 19-pts/Parabolic Filter, Threshold=3.0, Cutoff=0.1%, BG=3/1.0, Peak-Top=Summit
2-Theta	d(A)  	BG	Height	I%	Area	I%	FWHM	
22.960	3.8703	24	35	0.3	523	0.4	0.254	
27.377	3.2550	19	66	0.5	795	0.5	0.205	
29.359	3.0397	16	272	2.1	5633	3.8	0.352	
35.939	2.4968	15	55	0.4	971	0.7	0.300	
39.398	2.2852	17	51	0.4	1190	0.8	0.397	
40.280	2.2371	33	3027	23.4	31278	21.0	0.176	
43.159	2.0943	23	40	0.3	793	0.5	0.337	
44.823	2.0204	20	50	0.4	714	0.5	0.243	
47.481	1.9133	21	53	0.4	1058	0.7	0.339	
48.581	1.8725	10	46	0.4	1196	0.8	0.442	
58.240	1.5829	59	12956	100.0	148649	100.0	0.195	
73.160	1.2925	37	4525	34.9	53756	36.2	0.202	
86.962	1.1194	9	283	2.2	3832	2.6	0.230	
import os
rootDir="D:\XRD"
desc="D:\Result.txt"
list=os.listdir(rootDir)#返回資料夾下所有檔案(包括資料夾)
with open(desc,'w') as f:#寫入txt用
	for i in range(0,len(list)):#對資料夾下檔案遍歷
		path = os.path.join(rootDir,list[i])
		if os.path.isfile(path):
			with open(path) as file:#讀入
				orgin=file.readlines()
				for line0 in orgin[1:2]:#只需要第二行的檔名
					ll=line0.split()
					f.write(ll[0]+"\t")
				for line in orgin[4:]:#從第5行開始讀起
					l=line.split()
					#尋找需要的資料,先找到行,需要的資料為行首和行尾
					if eval(l[0])>40 and eval(l[0])<41:
						f.write(l[0]+"\t"+l[-1]+"\t")
					if eval(l[0])>58 and eval(l[0])<59:
						f.write(l[0]+"\t"+l[-1]+"\t")
					if eval(l[0])>73 and eval(l[0])<74:
						f.write(l[0]+"\t"+l[-1]+"\n")

以上就是一個簡單小程式,我在資料夾裡放了2個檔案,輸出Result.txt檔案內容為:

[2018A1.mdi]	40.280	0.176	58.240	0.195	73.160	0.202
[2018A2.mdi]	40.238	0.169	58.201	0.138	73.122	0.201

可以看到每個檔案過濾後的資料對應這裡的一行,分別是title和3個峰的出峰角度及半高寬。

然後使用Result.txt檔案去計算每個編號樣品的位錯密度。位錯密度公式如下:

具體過程是根據角度和波長確定每個峰的x,y由角度,波長和峰的半高寬決定,然後將每個峰的(x,y)做線性擬合,得到斜率e,代入公式計算位錯密度,b為測量材料的原子直徑。


具體程式碼如下:

#計算位錯密度,公式為14.4*e^2/b^2
#線性擬合,使用最小二乘法,返回斜率,截距和相關係數
import math
def linefit(x,y):
    N=len(x)
    sx,sy,sxx,syy,sxy=0,0,0,0,0
    for i in range(0,N):
        sx+=x[i]
        sy+=y[i]
        sxx+=x[i]*x[i]
        syy+=y[i]*y[i]
        sxy+=x[i]*y[i]
    a=(sx*sy/N-sxy)/(sx*sx/N-sxx)
    b=(sy-a*sx)/N
    r=abs(sy*sx/N-sxy)/math.sqrt((sxx-sx*sx/N)*(syy-sy*sy/N))
    return a,b,r
#最後的位錯密度,e為擬合直線的斜率
def finalResult(e):
    b=2*0.136
    return 14.4*e*e/(b*b)
#為了計算斜率,需要x和y,這是由角度和波長得到的x
def processX(two_theta,wave_length):
    return 2*math.sin(math.radians(two_theta/2))/wave_length
#同理,這是y
def processY(width_of_half_height,two_theta,wave_length):
    return math.radians(width_of_half_height)*math.cos(math.radians(two_theta/2))/wave_length
#資料存放點
desc="D:\z_density.txt"
#射線波長
waveLength=0.154056
with open(desc,'w') as f:
    with open('Result.txt') as file:
        for line in file.readlines():
            x=[]
            y=[]
            l=line.split()
            f.write(l[0]+"\t")#先寫入編號
            #將計算後的x,y放入列表,並進行線性擬合得到斜率
            x.append(processX(eval(l[1]),waveLength))
            x.append(processX(eval(l[3]),waveLength))
            x.append(processX(eval(l[5]),waveLength))
            y.append(processY(eval(l[2]),eval(l[1]),waveLength))
            y.append(processY(eval(l[4]),eval(l[3]),waveLength))
            y.append(processY(eval(l[6]),eval(l[5]),waveLength))
            a,b,r=linefit(x,y)
            #使用單位nm,轉換回m的單位要乘以10的18次方
            density=finalResult(a)*1E+18
            #寫入位錯密度
            f.write(str(density)+"\n")






最後,得到的位錯密度檔案內容為:

編號		位錯密度
[2018A1.mdi]    1386151205110.5142
[2018A2.mdi]    111718313508.58234
[2018A3.mdi]    4623375723130.143
[2018A4.mdi]    22286033082527.773
[2018B1.mdi]    194927802961905.56
[2018B2.mdi]    22155708900789.54
[2018B3.mdi]    68374811398775.93
[2018B4.mdi]    29311136297733.98
[2018C1.mdi]    125565352997.59462
[2018C2.mdi]    378237882585478.9
[2018C3.mdi]    133568439204055.64
[2018C4.mdi]    83169390213349.94
[2018D1.mdi]    629583022144958.8
[2018D2.mdi]    543660684253195.6
[2018D3.mdi]    45374460337589.57
[2018D4.mdi]    11007725612980.53


跟標準值數量級比較符合。

相關推薦

python檔案處理程式

因為實驗上有些資料要統計,所以需要用程式來過濾下資料,python懂一點點,喜歡它的簡潔。這裡用python將資料夾內的檔案資訊彙總到一個txt檔案。下面是一個XRD實驗資料的尋峰報告,我想找40,58,和73左右的峰,記錄它的具體角度和峰的半高寬。Peak Search R

Python指令碼處理JSON檔案,去除製表符、空格、回車等多餘符號

root_dir_path = "E:\popstar3\Popstar3_3.x_0_small\Resources\ui" extern_name_list = [".json", ".ExportJson"] import os import

python 實現處理檔案

Windows下的bat, linux 下的shell 用來做批處理都很好用, 可惜不通用 用 Python 來做就簡單多了, 不過一條條寫程式碼來呼叫系統命令也夠煩的了 程式設計師都很懶, 不願做機械無謂的重複性工作, 乾脆自己實現一個. 用法超級簡單,

Python-資料夾下所有檔案處理重新命名,修改格式

#coding:utf8 import os; def rename(): i=0 path=(r'C:\Users\25459\AppData\Local\Programs\Python\Python37\ceshi');#一定要加r轉義

使用python處理bat腳本ping檢測主機連通性

python bat 今天因為工作需求,要在報盤機器上(windows系統)檢測與上手連接的網絡可用性,使用zabbix自身的功能並不能解決這個問題。所以一開始考慮使用python腳本調系統的ping命令來檢測然後再使用zabbix來監控就可完成任務。 網上查了下,發現使用subproc

python、微信程式及各種開發者課程視訊

這裡有海量程式開發視訊,從基礎入門到各技術語言進階,共計約1.5T,150元可以給到全部; python視訊從0開始學,從基礎班到就業班,以及Python AI的完整教程,包括基礎必備到高等數學,資料分析與挖掘,機器學習及自然語言處理;可以掃我微信二維碼加微信 廢話不多說,完整

檔案管理,檔案路徑,檔案處理

一.檔案管理 1.新建 (1)新建檔案 touch   student  student1  student2 注意:touch預設用來建立檔案,同時此命令具備修改檔案時間戳功能 (2)新建目錄  mkdir 

Python-檔案操作處理

一、檔案操作基礎功能: f = open("檔案.txt", 'r', 'utf-8') #讀的模式開啟檔案 f = open("檔案.txt", 'r+', 'utf-8') #寫讀模式開啟檔案 f = open("檔案.txt", 'rb') # 讀取為二進位制模式,用於網路傳輸 f = o

Python入門基礎---購物車程式

1.購物車小程式: 1.1使用者輸入工資取60% 1.2列印輸出商品選單 1.3由使用者輸入數字選擇 #__author:Mifen #date: 2018/11/27 # 購物車程式 #把工資作為賬戶的餘額 salary = int (input('你的工資為:')) funds = s

Python爬蟲2-翻譯程式

1、簡介 本次部落格分享的內容為基於有道線上翻譯實現一個實時翻譯小程式,本次任務是參考小甲魚的書《零基礎入門學習Python》完成的,書中程式碼對於當前的有道詞典並不適用,使用後無法實現翻譯功能,在網上進行學習之後解決了這一問題。 2、前置工作 1)由於有道線上翻譯是“反爬

python之外星人入侵程式

 相信你大家在學習程式語言的過程中經常會碰到一個問題,那就是學完了基本的語法以後不知道自己要做什麼。其實,先找一些簡單的專案進行練手是非常好的一種學習程式設計的方式。前段時間學習了python的基本語法,這裡給大家推薦一本適合新手學習的python教程,叫《python程式設

Python--實現處理

在對大量資料進行操作時,批處理是不可避免。 這裡的批處理主要針對的是在同一個資料夾下的一批檔案進行處理,在網上找了很多資料,覺得下面這個連結的材料更直觀:https://blog.csdn.net/yaoxy/article/details/79427959 1.提取目錄:在批處理中時常會用到資料夾的相互

檔案管理、檔案路徑、檔案處理、命令列技巧

一、檔案管理 1.新建 ①新建檔案 touch file file1 file2 .... 注意:touch預設用來建立檔案,同時此命令具備修改檔案時間戳功能 ②新建目錄(directory) mkdir        dir                     

Python檔案&IO處理技巧(1): 讀寫、重定向、間隔符、路徑、存在性與檔案列表

1. 文字資料的讀寫 open() & write() : rt模式的重新整理模式 當我們需要讀寫各種不同編碼的文字資料(如ASCII,UTF-8或UTF-16編碼等), 可以直接使用帶rt模式的open()內建函式。如果需要將文字內容寫入到一個檔案中,就要使用帶有

Python實現微信程式支付功能

由於最近自己在做小程式的支付,就在這裡簡單介紹一下講一下用python做小程式支付這個流程。當然在進行開發之前還是建議讀一下具體的流程,清楚支付的過程。 1.支付互動流程  2.獲取openid(微信使用者標識) 1 import requests 2 3 from config import

利器--處理應用程式

          目前筆者正在進行直銷銀行網際網路核心的設計和研發,在銀行相關係統中有一塊內容比較關鍵,那就是跑批.因此接觸到了SpringBatch的相關內容,作為學習和記錄,有必要將Sprin

python打造微信程式,加帽神器祝你聖誕節快樂!

每年到這個時候,微信好友的頭像都會開始換上「聖誕」面板。最常見的就是加個聖誕小帽子了。     當然這種事情用很多 P 圖軟體都可以做到,微信搜尋「聖誕帽」也會有各種小程式出現,但是使用之前的驗證,總會要求繫結微信等各種資訊,接受各種彈幕廣告,甚至還有

python檔案文字處理:刪除空白行,刪除固定幾行,刪除固定列

話不多說,上程式碼 # coding=gbk # clearBlankline def clearBlankline(infile,outfile): infopen=open(infile,'r',encoding='utf-8') outopen=open(outfile,'

Python 打造微信程式-加減大師輔助程式

寫在前面:      主要運用python進行簡單的影象處理,不得不說python用起來是真的爽,各種庫的學習使得開發變得越來越簡單...     其實玩過這個小程式的應該知道實現起來也不是很難,很適合新手練手。第一次到了500多題不知道是因為被檢測了還是網掉了分數沒提交。。

Python 兩個圖形程式

程式1: 效果圖: 示例程式碼: print('\n'.join([' '.join([('Love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 &