我正在尝试理解Python并需要帮助我如何读取包含大量数据的文本文件,获取所需的特定信息并将其存储到数据库中。
------------------------------------------- < / em>的
* xxxxxxxxxxxx于2017-06-07-21.32.43开始
-------------------------------------------
******* D I S P L A Y ************
* *
* REC READ = 56,813
* REC WRITTEN = 56,813
* CALLS = 617
* FOUND = 963
* NOT FND = 54
* FOUND = 4963
* NOT FND = 0
* SYS = 1
* SYS = 462
--------------------------------------------
* xxxxxxxxxxxx于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)
输出:['7,558,265 我想要的是:[7558265,324322,22232等]
答案 0 :(得分: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])
如果需要,也可以将此for语句转换为while循环。有关在python中查看文件的更多信息,请参见here。
我不知道你想要实现什么类型的数据库(有几种用于不同的目的)。一个常见的是postgresql,可以通过psycopg2驱动程序通过python访问Python(psycopg2 install info here)。
然后,您可以在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()
希望这可以帮助您入门。继续尝试不同的事情,然后发布你的问题或者在你发现堆栈溢出的过程中找到很酷的东西!
干杯!