Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行Python脚本读取信息。每1秒在已知位置生成一个新的.txt文件_Python_Mysql_Scripting - Fatal编程技术网

运行Python脚本读取信息。每1秒在已知位置生成一个新的.txt文件

运行Python脚本读取信息。每1秒在已知位置生成一个新的.txt文件,python,mysql,scripting,Python,Mysql,Scripting,我的场景:我有一个已知的位置(目录/路径),每1秒生成一个.txt文件,我只需要复制它的内容(内容的格式可以直接用于放入MySQL查询),然后将它放入Python脚本中的MySQL查询中。我需要持续不断地这样做,也就是说,不停地、始终地这样做 脚本类似于: import MySQLdb mydb = MySQLdb.connect(host="IP_add", user="uname", passwd="pass", db="DB_name") cursor = mydb.cursor()

我的场景:我有一个已知的位置(目录/路径),每1秒生成一个.txt文件,我只需要复制它的内容(内容的格式可以直接用于放入MySQL查询),然后将它放入Python脚本中的MySQL查询中。我需要持续不断地这样做,也就是说,不停地、始终地这样做

脚本类似于:

import MySQLdb

mydb = MySQLdb.connect(host="IP_add", user="uname", passwd="pass", db="DB_name")
cursor = mydb.cursor()

#Need to add things below-

    sql = """INSERT INTO table_name VALUES('%d', 'dummy%d')""" % (i, i) //add what here ?

    cursor.execute(sql)
    mydb.commit()


mydb.close()
问题:我不知道如何让这样一个脚本始终运行,只打开一次MySQL连接,同时不断扫描我已知的文件夹/目录/路径以查找新的文本文件并继续阅读信息。它包含并放入MySQL插入查询[一件好事是我不需要格式化文本文件的内容,只需要读取它包含的任何内容。]

请帮忙

问候,,
Chirayu也可以使用MySQL命令<代码>加载数据填充

这将比单个插入更快地完成您想要做的事情,而且您不需要任何perl代码来读取这些行

示例

sql = """LOAD DATA INFILE '/var/test/test1.txt' INTO TABLE table1"""
cursor.execute(sql)
加载数据填充有很多字段和行分隔符选项,请访问:

加载包含以下内容的文件:

6666, 'test'
使用

请注意,在文件路径上(甚至在Windows上)使用正斜杠,并使用
'\''
将一个引号放在两个引号内
'
。行终止符对于Windows是正确的,Linux需要以“\n”结尾的

如果你真的很懒
创建一个MySQL事件

DELIMITER $$

CREATE EVENT import_file       
ON SCHEDULE
EVERY 1 MINUTE                 
DO BEGIN
  LOAD DATA INFILE 'c:/test.txt' INTO TABLE `test` IGNORE 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\'' 
    LINES TERMINATED BY '\r\n';
END$$

DELIMITER ;
IGNORE
关键字将跳过触发主键或唯一键冲突的字段,因此它不会尝试导入这些条目。
将适当的字段定义为唯一字段,以防止MySQL导入重复的条目

有关活动的更多信息

请参阅:

@Cedric,非常感谢您的回复。您的代码似乎是正确的,但我有两个问题-1)如果我想在特定位置查找任何新文件,然后执行您提供的操作(即根据您的代码查找最新的“文件名”),如何执行?2) 如何在-os.stat(filename)中指定文件名的路径?很抱歉,如果我的问题被认为是幼稚的,但我几乎没有Python经验,需要这些来让我的项目工作起来。@Cédric:做得好;您可能希望在循环中添加一个time.sleep(1),以避免固定CPU。@Cedric&others,我在-处得到一个错误,将open(“query.txt”)作为f:,它在单词open下面加下划线,并在语法中显示erro:无效语法…帮助!如果您的python版本<2.5,with语句未知,请将其替换为:
f=open(filename)
sql stuff。。。然后
f.close()
@Cedric,成功了..非常感谢,我有一个问题,Qs。1) 对于我的第一条注释,根据您的代码,如果停止条件为while(true),现在当我运行此脚本时,它会继续运行,可能会查找文件名中的更改,但如果我在同一文件中进行任何更改,则脚本将停止并给出错误,如我在下一条注释中给出的错误(此注释中的字符限制):P!是什么创建了这个文件?如果这是*nix,您可以创建一个管道文件,并在写入数据时读取一端it@tMC,那么数据是在基于linux的机器上创建的,你能给你所说的这个管道文件提供一个链接吗?
man mkfifo
当心,当进程打开文件进行写入时,它将被阻止,直到另一个进程打开它进行读取。@Johan,我在已知位置尝试了一个常量文本文件的方法,得到了一个错误,您可能会很容易解决它。。我的文本文件只包含-6666,'kool',我在表1附近说错误的mysql语法时出错了…帮助@Chirayu,忘记了
关键字,修复了答案。@Johan,感谢您的编辑。.我的文件包含您所说的数据,该文件与python脚本存储在同一文件夹中,这是一台linux机器。.与MySQL的连接是远程的,即。,MySQL存储在远程windows计算机上。下面是我的脚本
import MySQLdb import os mydb=MySQLdb.connect(host=“11.40.3.167”,user=“anad”,passwd=“anad”,db=“trial1”)cursor=mydb.cursor()sql=“”将数据填充'test.txt'加载到表中
intrial1
”cursor.execute(sql)mydb.commit()mydb.close()
我收到一个错误,这是下一条评论。我得到了错误:
\u mysql\u exceptions.InternalError:(29,“文件'C:\\Documents and Settings\\All Users\\Application Data\\mysql\\mysql Server 5.1\\Data\\trial1\\test.txt'not found(Errcode:2)”)
即使在Windows上也使用前向斜杠并指定完整路径,否则将使用相对于数据存储的路径。
LOAD DATA INFILE 'c:/test.txt' INTO TABLE `test` 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\'' 
LINES TERMINATED BY '\r\n';
DELIMITER $$

CREATE EVENT import_file       
ON SCHEDULE
EVERY 1 MINUTE                 
DO BEGIN
  LOAD DATA INFILE 'c:/test.txt' INTO TABLE `test` IGNORE 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\'' 
    LINES TERMINATED BY '\r\n';
END$$

DELIMITER ;