2017-06-14 94 views
-1

我正在嘗試理解Python並需要關於如何讀取包含大量數據的文本文件的幫助,需要具體信息,並將其存儲到數據庫中。讀取特定數據的.txt文件並將其存儲到sql字段

-------------------------------------------
* xxxxxxxxxxxx從2017-06-07-21.32.43開始。
-------------------------------------------

******* DISPLAY ************
* *
* REC READ = 56813
* REC書面= 56813
* CALLS = 617
*實測值= 963
* NOT FND = 54
* FOUND = 4963
* NOT FND = 0
* SYS = 1
* SYS = 462
------------------------------------ --------
* xxxxxxxxxxxx COMPLETED AT 2017-06-07-21.35
------------------------- -------------------

with open(fname) as f: 
content = f.readlines() 
content = [x.strip() for x in content] 

我的想法:從我的理解,我應該通過讀取線中的.txt線接近這一點,將其存儲到數組,然後使用if語句來測試索引中的值是否爲真(例如Rec讀,寫)等。如何得到它旁邊的值?... (只是一個想法,這可能是完全錯誤的)

更新:使用下面的代碼,我能夠讀取所有行並獲取正確的信息這是必要的。關鍵字存儲在行[0]中,值存儲在行[1]中。我現在試圖將每個值附加到列表中,以便我可以在列表上運行查詢並將其添加到訪問數據庫中的正確字段。現在當我打印一份清單時,它只顯示了一個值,而不是其他值。我的原始文件具有與相同數據配對的多個值。換句話說,有多個「Rec Read」。

file = open(r"C:\Users\cqt7wny\Desktop\joblogs.txt") 

rec_read = [] 
rec_written = [] 
calls = [] 


for line in file: 
    if "REC READ" in line: #This if statement looks through the line 
    line = line.split("=") #This makes the line two items in a list 
    rec_read.append(line[1]) 

    if "REC WRITTEN" in line: 
     line = line.split("=") 
     rec_written.append(line[1]) 
    if "CC01 CALLS" in line: 
     line = line.split("=") 
     calls.append(line[1]) 

print(rec_read) 

輸出:[」 7558265 我想要什麼:[7558265,324322,22232等]

+2

向我們展示您在嘗試提問之前的嘗試 – depperm

+0

@depperm added ..在此之後卡住 –

+0

您需要修正縮進以準確匹配您實際運行的內容。就目前而言,你在這裏提供的代碼會拋出'IndentationError'和'SyntaxError's。最簡單的方法是從你的文本編輯器複製,粘貼到你的問題,然後突出顯示代碼並按下ctrl-k,它會爲你設置格式。 –

回答

1

你有一個很好的理論方法。以下是一些幫助您入門的代碼,但您必須將其更改爲符合您的需求。

打開一個文件與Python:

file = open('filename.txt')

要通過線通過文件行迭代:

for line in file: 
    if "REC READ" in line: #This if statement looks through the line 
    line = line.split("=") #This makes the line two items in a list 
    print(line[0]) 

這對於語句也可以在必要時製作成while循環。有關在python中查看文件的更多信息可以在here找到。

我不知道你想要實現什麼類型的數據庫(有幾種用於不同的目的)。常見的一個是postgresql,它可以通過Python的psycopg2驅動程序(psycopg2 install info here)通過python進行訪問。

然後就可以開始在Python在數據庫上工作:

import psycopg2 
conn = psycopg2.connect(database=url.path[1:],user=url.username,password=url.password,host=url.hostname,port=url.port) 
cur = conn.cursor() 
cur.execute("""CREATE TABLE tablename (col1, col2, col3)""") 
cur.execute("""INSERT INTO tablename (col1, col2, col3) VALUES (%s, %s, %s);""", (item1, item2, item3)) 
conn.commit() 

希望這可以幫助您開始。繼續嘗試不同的事情,然後發佈你的問題或冷卻你找到的東西,以stackoverflow!

乾杯!

+0

謝謝!使用這種方式最好現在創建一個我需要的索引的空數組,並將值附加到每個特定數組。 –

+0

@TenkorangDarko對應於python []的數據結構是一個* list *,而不是一個數組,因此,做一個空的'list'和'.append'ing爲是做事情的典型方式。請注意,'list'的底層實現是一個自動調整大小的數組列表,它具有分段的恆定時間'.append'性能,所以它被設計爲以這種方式工作。 –

+0

@ juanpa.arrivillaga這正是我所做的。我正在使用的文本文件具有相同「Rec Read」的多個版本。當我打印時(第[1]行),它列出了所有相應的值。我現在做了一個列表,當我在for語句中追加它時,只有1個值被保存。 –

相關問題