如果要分析金融的數據,數據一定會儲存在某個地方,可以是檔案,也可以放資料庫。今天要來介紹儲存檔案的方法,並且介紹檔案可以存成什麼類型
os套件是Python中常用的文件和目錄的操作,在os中常用的函式
名稱 | 說明 |
---|---|
system() | 執行系統command |
mkdir(E) | 建立E目錄,如果E目錄已存在會發生錯誤 |
rmdir(E) | 移除E目錄 |
remove(E) | 移除E檔案,如果E是目錄就會出錯 |
getcwd() | 取得目前所在路徑 |
rename(src, dst) | 將 src 改名為 dst |
先示範os的函式
import os
path = "myDir"
os.mkdir(path) # 建立目錄
os.rmdir(path) # 移除目錄
os.system("mkdir dir2") #執行作業系統命令
os.rename('day06.txt', 'day06_change.txt')
print("當前目錄位置--->",os.getcwd())
# 輸出結果
當前目錄位置---> C:\Users\lasts\Desktop\git\demo\python\learn_python_data_analysis\01.Install
file = "day06-01.txt"
print("完整路徑名稱--->",os.path.abspath(file)) # 完整路徑名稱
print(file," 是否存在--->",os.path.exists(file)) # 是否存在
print(file," 檔案大小--->",os.path.getsize(file)) #取得檔案大小
# 輸出結果
完整路徑名稱---> C:\Users\lasts\Desktop\git\demo\python\learn_python_data_analysis\01.Install\day06-01.txt
day06-01.txt 是否存在---> True
day06-01.txt 檔案大小---> 0
import os
for root, dirs, files in os.walk("day06-dir"):
for name in files:
print("檔案--->",os.path.join(root, name))
for name in dirs:
print("目錄--->",os.path.join(root, name))
print()
# 輸出結果
目錄---> day06-dir\first
目錄---> day06-dir\second
目錄---> day06-dir\third
檔案---> day06-dir\first\first-01.txt
檔案---> day06-dir\first\first-02.txt
檔案---> day06-dir\first\first-03.txt
檔案---> day06-dir\second\second-01.txt
檔案的輸出和輸入
語法:open(filename, mode)
mode傳入的是字串,第一個字母代表操作,第二個字母代表類型
操作的部分
文字 | 說明 |
---|---|
r | 讀取 |
w | 寫入。檔案不存在則新增,檔案存在則寫入存在檔案 |
X | 寫入。只有當檔案不存在時才可寫入 |
a | 在檔案結尾處寫入 |
類型
文字 | 說明 |
---|---|
t | 文字 |
b | 二進位 |
以下示範寫入文字
content = '''Python first
測試中文
第三行
''' # '''...''' 保留原本的格式
f = open('firstFile.txt','wt') # 寫入模式,檔案如果已經存在會被覆蓋
f.write(content)
f.close()
讀取文字
f2 = open('firstFile.txt','r') # 讀取模式
for line in f2:
print(line, end="")
f2.close()
# 輸出結果
Python first
測試中文
第三行
股票,收盤價,單量
台積電,238,23
大同,40,121
華新科,174,105
* 以下示範寫入CSV / 讀取CSV
import csv
with open('day06-csv.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile) # 建立 CSV 檔寫入器
writer.writerow(['股票', '收盤價', '單量'])
writer.writerow(['台積電', 238, 23])
writer.writerow(['大同', 40, 121])
writer.writerow(['華新科', 174, 105])
# ---------------------------------------------------------- read
with open('day06-csv.csv', newline='') as csvfile:
rows = csv.reader(csvfile) # 讀取 CSV 檔案內容
for row in rows: # 以迴圈輸出每一列
print(row)
# 輸出結果
['股票', '收盤價', '單量']
['台積電', '238', '23']
['大同', '40', '121']
['華新科', '174', '105']
<stock>
<tsmc>
<close name="收盤價">238</close>
<buy name="單量">23</buy>
</tsmc>
</stock>
* 以下示範寫入XML / 讀取XML
import xml.etree.ElementTree as ET
data = ET.Element('stock') #建立節點stock
tsmc = ET.SubElement(data, 'tsmc') # 在stock節點底下建立子節點
close = ET.SubElement(tsmc, 'close')
buy = ET.SubElement(tsmc, 'buy')
close.set('name','收盤價') # 設定節點的名稱
buy.set('name','單量')
close.text = '238'
buy.text = '23'
mydata = ET.tostring(data)
myfile = open("day06-xml.xml", "wb")
myfile.write(mydata)
myfile.close()
# ---------------------------------------------------------- read
tree = ET.parse('day06-xml.xml')
root = tree.getroot()
for elem in root:
for subelem in elem:
print(subelem.get('name'),"----->",subelem.attrib)
# 輸出結果
收盤價 -----> {'name': '收盤價'}
單量 -----> {'name': '單量'}
{
"stock": [
{
"name": "台積電",
"close": "238",
"buy": "23"
},
{
"name": "大同",
"close": "40",
"buy": "121"
},
{
"name": "華新科",
"close": "174",
"buy": "105"
}
]
}
* 以下示範寫入JSON / 讀取JSON
import json
data = {}
data['stock'] = []
data['stock'].append({
'name': '台積電',
'close': '238',
'buy': '23'
})
data['stock'].append({
'name': '大同',
'close': '40',
'buy': '121'
})
data['stock'].append({
'name': '華新科',
'close': '174',
'buy': '105'
})
with open('day06-json.json', 'w') as outfile:
json.dump(data, outfile,ensure_ascii=False,indent=2)
# ---------------------------------------------------------- read
with open('day06-json.json') as json_file:
data = json.load(json_file)
for p in data['stock']:
print('股票: ' + p['name'])
print('收盤價: ' + p['close'])
print('單量: ' + p['buy'])
print('')
# 輸出結果
股票: 台積電
收盤價: 238
單量: 23
股票: 大同
收盤價: 40
單量: 121
股票: 華新科
收盤價: 174
單量: 105
stock:
buy: '121'
close: '238'
name: '台積電'
* 以下示範寫入YAML / 讀取YAML
import yaml
cfg = {
"stock": dict(
name='台積電',
close='238',
buy='121'
)
}
with open("day06_yml.yml", 'w') as outfile:
yaml.dump(cfg, outfile, default_flow_style=False,allow_unicode=True)
# ---------------------------------------------------------- read
with open("day06_yml.yml", 'r') as yml:
contents = yaml.safe_load(yml)
print("取得股票--->",contents['stock'])
# 輸出結果
取得股票---> {'buy': '121', 'close': '238', 'name': '台積電'}
筆誤:
import xml.etree.ElementTree as ET
\data = ET.Element('stock') #建立節點stock
多了斜線
大大真的很細心,也謝謝你的觀看,有人看真的很感動,已經修正了
因為邊看邊做,就順便幫忙校正了,這個題目我還蠻有興趣的,感謝分享啊!
我其實也只是個初學者,對於股票和Python都是XDD,非常感謝你的回覆還有糾正。