Ric*_*ich 4 python python-3.x python-3.4 python-3.5 python-3.6
当我运行下面的查询时,它会创建一个名为 \xe2\x80\x98mycsvfile\xe2\x80\x99 的文件。但是,有没有办法在创建 CSV 文件时添加当前日期和时间戳?例如,如果我现在运行此查询,则文件应命名为 mycsvfile20171012 \xe2\x80\x93 10:00:00 (类似的名称)。
\n\n有人可以编辑我的代码并告诉我如何做到这一点吗?
\n\n我的代码:
\n\nfrom elasticsearch import Elasticsearch\nimport csv\n\nes = Elasticsearch(["9200"])\n\n# Replace the following Query with your own Elastic Search Query\nres = es.search(index="search", body=\n {\n "_source": ["DTDT", "TRDT", "SPLE", "RPLE"],\n "query": {\n "bool": {\n "should": [\n {"wildcard": {"CN": "TEST1"}}\n\n ]\n }\n }\n}, size=10)\n\n\n\nheader_names = { \'DTDT\': \'DATE\', \'TRDT\': \'TIME\', ...}\n\nwith open(\'mycsvfile.csv\', \'w\') as f: # Just use \'w\' mode in 3.x\n header_present = False\n for doc in res[\'hits\'][\'hits\']:\n my_dict = doc[\'_source\'] \n if not header_present:\n w = csv.DictWriter(f, my_dict.keys())\n w.writerow(header_names) # will write DATE, TIME, ... in correct place\n header_present = True\n\n\n w.writerow(my_dict)\nRun Code Online (Sandbox Code Playgroud)\n\n先感谢您!
\n在文件名中使用下划线比任何其他特殊字符更好,因为它被广泛接受因此构建文件名如下:
csv_file = 'myfile_' + str(datetime.now().strftime('%Y_%m_%d_%H_%M_%S')) + '.csv'
Run Code Online (Sandbox Code Playgroud)
使用日期时间如下:
from elasticsearch import Elasticsearch
import csv
es = Elasticsearch(["9200"])
# Replace the following Query with your own Elastic Search Query
res = es.search(index="search", body=
{
"_source": ["DTDT", "TRDT", "SPLE", "RPLE"],
"query": {
"bool": {
"should": [
{"wildcard": {"CN": "TEST1"}}
]
}
}
}, size=10)
from datetime import datetime
import os
file_path = <PASS YOUR FILE HERE>
csv_file = 'myfile_' + str(datetime.now().strftime('%Y_%m_%d_%H_%M_%S')) + '.csv'
csv_file_full = os.path.join(file_path, os.sep, csv_file)
header_names = { 'DTDT': 'DATE', 'TRDT': 'TIME', ...}
with open(csv_file_full, 'w') as f: # Just use 'w' mode in 3.x
header_present = False
for doc in res['hits']['hits']:
my_dict = doc['_source']
if not header_present:
w = csv.DictWriter(f, my_dict.keys())
w.writerow(header_names) # will write DATE, TIME, ... in correct place
header_present = True
w.writerow(my_dict)
Run Code Online (Sandbox Code Playgroud)
是的,您可以这样做:\n但是文件名中不支持“:”,因此 20171010\xe2\x80\x9310.00.00
\n\n>>> import time\n>>> fname = lambda : "mycsvfile{}.csv".format(time.strftime("%Y%m%d-%H.%M.%S"))\n>>> \n>>> fname()\n\'mycsvfile20171012-17.24.59.csv\'\n\n>>> with open(fname()) as f:\n>>> pass \nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
23300 次 |
| 最近记录: |