「python讀取txt數字」的推薦目錄:
- 關於python讀取txt數字 在 コバにゃんチャンネル Youtube 的最讚貼文
- 關於python讀取txt數字 在 大象中醫 Youtube 的最佳貼文
- 關於python讀取txt數字 在 大象中醫 Youtube 的精選貼文
- 關於python讀取txt數字 在 Re: [問題] 抓取txt特定內容並作註解or計算- 看板Python 的評價
- 關於python讀取txt數字 在 Python 讀取txt 文字檔,一篇搞懂! - ShengYu Talk 的評價
- 關於python讀取txt數字 在 透過Python讀取每列2個以上數字的資料檔 - YouTube 的評價
- 關於python讀取txt數字 在 Python 處理一個求和運算 - GitHub 的評價
- 關於python讀取txt數字 在 【python】讀取和輸出到txt :: 全台大學開課課程資訊網 的評價
- 關於python讀取txt數字 在 Re: [問題] 抓取txt特定內容並作註解or計算- 看板Python 的評價
- 關於python讀取txt數字 在 旅法師對決2015 下載youtube 2023 - zenginolsam.net 的評價
python讀取txt數字 在 大象中醫 Youtube 的最佳貼文
python讀取txt數字 在 大象中醫 Youtube 的精選貼文
python讀取txt數字 在 Python 讀取txt 文字檔,一篇搞懂! - ShengYu Talk 的推薦與評價
本篇介紹python 讀取txt 文字檔的方法,python 讀檔是檔案處理的必備技能,在資料處理時常需要用python 對txt 文字檔讀取並進行一些加工處理, ... ... <看更多>
python讀取txt數字 在 透過Python讀取每列2個以上數字的資料檔 - YouTube 的推薦與評價
在這個例子中,我們以記錄身高和體重資料的檔案進行 讀取 ,之後再計算個別的BMI並輸出顯示。 ... <看更多>
python讀取txt數字 在 Re: [問題] 抓取txt特定內容並作註解or計算- 看板Python 的推薦與評價
獲取數值可以用re.split簡單達成
填入文字本來想要用f-string加上\t間隔來排版
發現國字的全形和數字的半形在同一欄時,很難讓欄位對齊
所以做了一點細部的調整
大致的流程是獲得文本list之後,對需要修改的行位做修改,再全部黏起來('\n'.join)覆寫回去
Before:
After:
程式碼:
import re
#設定文字檔路徑
txt_filepath='path/to/data.txt'
#定義動作:在文字行的串列中獲取兩個虛線的行索引
def GetDashlineRowIndexes(line_list):
i_dashline_row1=None #第一條虛線的行索引
i_dashline_row2=None #第二條虛線的行索引
#逐行搜尋
for i_row,line_text in enumerate(line_list):
#判定有10個以上的虛線字元即為虛線行
if '-'*10 in line_text:
if not i_dashline_row1:
i_dashline_row1=i_row
else:
i_dashline_row2=i_row
break
#若兩條的虛線都有找到
if all([i_dashline_row1,i_dashline_row2]):
return i_dashline_row1, i_dashline_row2
#若兩行的虛線有其中一條未找到
else:
raise ValueError('文字檔應至少包含兩個虛線行')
#定義動作:將單行的數據文字串列輸出為單行等寬欄的字串
def RowDataListToOneLine(row_data_list):
#設定固定欄寬
space_len=8
#生成新的單行文字內容
new_line=''
for row_data in row_data_list:
#計算全形字的數量
num_of_fullwidth_chr=sum(ord(s)>126 for s in row_data)
#使用f-string排版,設定向右對齊(根據全形字的數量去教準)
new_line+=f'{row_data:>{space_len - num_of_fullwidth_chr}}\t'
return new_line
#讀取所有txt文字
with open(txt_filepath,'r',encoding='utf-8') as f:
text=f.read()
#分割每一行內容做成list
line_list=text.split('\n')
#獲取兩個虛線的行索引值
i_dashline_row1, i_dashline_row2 = GetDashlineRowIndexes(line_list)
#處理標題列文字行,先獲取標題列的行索引
i_header_row=i_dashline_row1 - 1
#獲取單行標題列文字並分割為串列
header_line=line_list[i_header_row]
row_data_list=re.split(r'\s+',header_line.lstrip())
#將原標題列字串替換為等寬欄的字串
line_list[i_header_row]=RowDataListToOneLine(row_data_list)
#處理數據列文字行
for i_row in range(i_dashline_row1+1, i_dashline_row2):
#獲取單行的數據文字串列
row_data_list=re.split(r'\s+',line_list[i_row].lstrip())
#取左邊10欄
row_data_list=row_data_list[:10]
#取得各項數值
W,X,Y,Z,W_w,X_w,Y_w,Z_w=(float(data) for data in row_data_list[2:])
#計算均重,輸出文字格式:取至兩個小數點並向右對齊(若分母為零則顯示0.00)
W_avg=f'{W_w/W:>.2f}' if W else '0.00'
X_avg=f'{X_w/X:>.2f}' if X else '0.00'
Y_avg=f'{Y_w/Y:>.2f}' if Y else '0.00'
Z_avg=f'{Z_w/Z:>.2f}' if Z else '0.00'
#將原數據列字串替換為等寬欄的字串
line_list[i_row]=RowDataListToOneLine(row_data_list +
[W_avg,X_avg,Y_avg,Z_avg])
#重新組成text內容
new_text='\n'.join(line_list)
#覆寫檔案
with open(txt_filepath,'w',encoding='utf-8') as f:
f.write(new_text)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.6.172 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1581057249.A.E3A.html
※ 編輯: papple23g (61.216.6.172 臺灣), 02/07/2020 14:41:13
... <看更多>