读取特定数据的.txt文件并将其存储到sql字段
我正在尝试理解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等]
你有一个很好的理论方法。以下是一些帮助您入门的代码,但您必须将其更改为符合您的需求。
打开一个文件与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!
干杯!
谢谢!使用这种方式最好现在创建一个我需要的索引的空数组,并将值附加到每个特定数组。 –
@TenkorangDarko对应于python []的数据结构是一个* list *,而不是一个数组,因此,做一个空的'list'和'.append'ing为是做事情的典型方式。请注意,'list'的底层实现是一个自动调整大小的数组列表,它具有分段的恒定时间'.append'性能,所以它被设计为以这种方式工作。 –
@ juanpa.arrivillaga这正是我所做的。我正在使用的文本文件具有相同“Rec Read”的多个版本。当我打印时(第[1]行),它列出了所有相应的值。我现在做了一个列表,当我在for语句中追加它时,只有1个值被保存。 –
向我们展示您在尝试提问之前的尝试 – depperm
@depperm added ..在此之后卡住 –
您需要修正缩进以准确匹配您实际运行的内容。就目前而言,你在这里提供的代码会抛出'IndentationError'和'SyntaxError's。最简单的方法是从你的文本编辑器复制,粘贴到你的问题,然后突出显示代码并按下ctrl-k,它会为你设置格式。 –