关于将数据写入CSV,“日期格式”类型数据变化的一个解决方案

本文讨论了将特定格式的数据写入CSV文件时遇到的问题,即原本不是日期格式的数据被错误地转换成了日期格式。通过在字符串末尾添加特殊字符来规避这一问题,并探讨更优解决方案。

问题描述:将数据读取为byte[]数组之后,其中有的数据并非笔者并不期望它是日期格式,但是形式和日期格式一样,这样写出到CSV的时候会将其默认转化为日期斜杠形式。例如:2021-12-22数据,写到csv中变成了2021/12/22。这并非笔者期望。

解决办法(并不推荐):读取每个String字符串,在此字符串后面加入"\t",可以避免CSV的默认转换。

副作用:这样会导致数据本身被修改了,加入“\t”本质是修改了这个字符串。并且产生的CSV此字段在选择的时候会出现多余的留白。所以并不推荐。

笔者暂时也没有想到什么更好的方法,有什么好的方法也欢迎评论区交流!!!

<think>由于通达信软件本身是一个股票交易软件,它支持自定义指标公式和外部数据导入。但是,实时更新网站数据到通达信,通常需要以下步骤: 1. 从目标网站获取数据(可能需要网络爬虫或调用API) 2. 将数据处理成通达信可以识别的格式(通常为.txt或.csv文件,并放在通达信指定的目录下) 3. 通达信软件通过读取外部数据文件来显示自定义数据 但是,通达信本身不支持直接通过外部程序实时写入数据到其运行内存中,所以一般做法是定期(比如每分钟)更新数据文件,然后通达信软件会定期(比如每分钟)重新加载外部数据。 下面是一个简单的Python程序示例,用于定期从网站获取数据并更新到通达信的外部数据目录中。 注意:这个程序需要根据具体的网站和数据结构进行调整。同时,通达信的外部数据导入功能需要先进行设置(在通达信中,通常通过“自定义数据管理”来创建新的数据项,并指向特定的文件路径)。 步骤: 1. 确定要抓取的网站和数据结构。 2. 确定通达信外部数据存放的路径(例如:通达信安装目录下的T0002/dradis/目录)。 3. 编写爬虫或调用API获取数据,并按照通达信要求的格式保存为文本文件(每行格式:股票代码,数据值)。 4. 设置定时任务,定期更新数据文件。 以下是一个示例代码,假设我们要从某个API获取股票的最新温度数据(假设的),并更新到通达信。这里使用requests库获取数据,并假设返回的是JSON格式。 注意:在实际应用中,请确保遵守网站的使用条款,不要频繁请求以免被封IP。 代码结构: - 定义要请求的URL(假设为某个提供股票相关数据的API) - 定义通达信数据文件存放路径 - 编写函数获取数据并解析 - 将数据按照通达信外部数据格式保存 - 设置定时任务,每隔一段时间运行一次 由于不同网站返回的数据格式不同,这里仅提供一个框架。 假设通达信要求的外部数据格式为: 股票代码1, 数据值1 股票代码2, 数据值2 例如: 600000, 25.3 600001, 26.5 注意:股票代码要带市场前缀,如沪市为sh,深市为sz,但在通达信中,外部数据文件中的股票代码通常与通达信内部表示一致(例如,沪市为6开头,深市为0或3开头,并且不带市场前缀)。具体需要根据通达信的要求来定。 以下代码示例:</think>### 解决方案:将网站数据实时更新到通达信 以下是使用Python开发的完整解决方案,通过HTTP请求获取网站数据,解析后生成通达信可识别的`.csv`或`.txt`文件,并利用通达信的外部数据接口实现实时更新。 #### 核心步骤: 1. **数据获取**:使用Python爬取目标网站数据 2. **数据处理**:转换为通达信要求的格式 3. **文件生成**:输出到通达信指定目录 4. **实时更新**:通过定时任务/文件监控实现数据刷新 --- ### 完整代码实现 ```python import requests import pandas as pd import time import os from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler # 配置参数 TARGET_URL = "https://api.example.com/finance-data" # 替换为实际数据源URL TONGDAXIN_DIR = "C:/new_tdx/vipdoc/cw/stock" # 通达信自定义数据存放路径 UPDATE_INTERVAL = 60 # 数据更新频率(秒) def fetch_website_data(): """从目标网站获取实时数据""" try: response = requests.get( TARGET_URL, headers={"User-Agent": "Mozilla/5.0"}, timeout=10 ) response.raise_for_status() return response.json() # 假设返回JSON格式数据 except Exception as e: print(f"数据获取失败: {e}") return None def process_data(raw_data): """处理数据为通达信可识别格式""" # 示例:假设原始数据格式为 [{"code": "600000", "value": 25.3}, ...] processed = [] for item in raw_data["data"]: # 通达信要求格式:股票代码, 数据值 # 注意:股票代码需转换为6位字符串(沪市6开头,深市0/3开头) code = item["code"].zfill(6) processed.append({ "code": code, "value": item["value"] }) return pd.DataFrame(processed) def save_to_tdx_format(df): """保存为通达信可读取的CSV文件""" # 生成符合通达信格式的文件名:sh/sz+6位代码.csv for _, row in df.iterrows(): market_prefix = "sh" if row["code"].startswith("6") else "sz" filename = f"{market_prefix}{row['code']}.csv" filepath = os.path.join(TONGDAXIN_DIR, filename) # 写入数据(通达信要求:日期,开盘,最高,最低,收盘,成交量,成交额) with open(filepath, "w") as f: f.write(f"20240501,{row['value']},,,,,\n") # 示例数据格式 class FileChangeHandler(FileSystemEventHandler): """监控文件变化并刷新通达信数据""" def on_modified(self, event): if not event.is_directory: print(f"检测到文件更新: {event.src_path}") # 此处可添加通达信数据刷新指令(需通过通达信插件实现) def start_monitoring(): """启动文件监控服务""" event_handler = FileChangeHandler() observer = Observer() observer.schedule(event_handler, TONGDAXIN_DIR, recursive=True) observer.start() print(f"开始监控目录: {TONGDAXIN_DIR}") return observer def main(): observer = start_monitoring() try: while True: print(f"开始数据更新循环...") raw_data = fetch_website_data() if raw_data: df = process_data(raw_data) save_to_tdx_format(df) print(f"成功更新 {len(df)} 条数据") time.sleep(UPDATE_INTERVAL) except KeyboardInterrupt: observer.stop() observer.join() if __name__ == "__main__": main() ``` --- ### 关键代码解析 1. **数据获取模块**: - 使用`requests`库获取网站数据 - 添加超时和异常处理保证稳定性 - 建议设置合理的请求头避免被反爬 2. **数据处理模块**: - 将原始数据转换为DataFrame - 股票代码补全至6位(通达信要求) - 区分沪市(sh)/深市(sz)前缀 3. **文件输出模块**: - 生成通达信标准文件名格式:`sh600000.csv` - 写入CSV文件(日期,开盘,最高,最低,收盘,成交量,成交额) - 文件存放至通达信自定义数据目录 4. **实时更新机制**: - 通过`time.sleep(UPDATE_INTERVAL)`定时更新 - 使用`watchdog`监控文件变化 - 文件更新时触发通达信数据刷新(需配合通达信插件) --- ### 通达信端配置步骤 1. **放置数据文件**: - 将程序输出的CSV文件放入通达信目录: ``` C:/new_tdx/vipdoc/cw/stock # 自定义数据存放路径 ``` 2. **导入外部数据**: - 打开通达信 → 功能 → 定制品种 → 数据管理 - 选择"导入数据" → 指定CSV文件所在目录 - 设置数据对应关系(日期→日期,数值→收盘价等) 3. **实时刷新**(两种方法): - **手动刷新**:在K线图界面按`F11` - **自动刷新**(需额外开发): ```python # 通达信插件示例(需使用通达信API) import win32com.client tdx = win32com.client.Dispatch("TdxW_Main.TdxMain") tdx.RefreshData() # 刷新数据 ``` --- ### 注意事项 1. **数据源兼容性**: - 需要根据实际网站返回格式调整JSON解析逻辑 - 金融数据源推荐使用免费API(如Alpha Vantage、Tiingo等) 2. **通达信限制**: - 自定义数据更新频率最低为3秒 - 单文件最大支持100万行数据 - 需关闭通达信"只读模式"才能写入文件 3. **部署建议**: - 使用Windows任务计划定期运行脚本 - 在云服务器部署实现24小时更新 - 添加日志记录功能(如`logging`模块) --- ### 替代方案:DLL插件开发 对于更高实时性要求,可开发通达信DLL插件: ```cpp // 示例:通达信DLL插件框架(C++) __declspec(dllexport) int __stdcall Tdx_Plugin(int code, void* pData) { if (code == 0x100) { // 初始化消息 // 创建定时器/线程获取数据 } else if (code == 0x200) { // 实时行情消息 // 更新内存数据 } return 0; } ``` 需配合通达信SDK开发包(官方未公开,需第三方逆向) ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值