V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  wxf666  ›  全部回复第 6 页 / 共 27 页
回复总数  529
1 ... 2  3  4  5  6  7  8  9  10  11 ... 27  
317 天前
回复了 faketemp 创建的主题 分享创造 Json 数据通用提取工具[离线]
@faketemp #15 不知道你输入了什么命令,不太好猜出错原因。。


我虚拟机装了个 Win XP 试了试,这些工具的最新版都还能正常运行:

- jq ( v1.6 ,2.58 MB ,json 处理)
- SQLite ( v3.42 ,1.09 MB ,小型数据库)
- BusyBox ( v1.37 ,606 KB ,Linux Shell 风格脚本)
- QuickJS ( v2021-03-27 ,863 KB ,支持 ES2020 的 js 引擎)

有以上工具,足够编写很多便捷的小脚本了,也能拖动文件自动处理之类的。

*( dsq 和 fx 确实在 Win XP 上运行不了,估计至少得 Win 7 。。)*


试了试用这些工具导出 [行政区划第 5 级 json 数据( 80 MB )]( https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/villages.json) 为 CSV ,确实还是你的 Json2Csv 工具快些。但总体而言,速度差异不是很大(对比如下,末尾附截图):

| | Json2Csv | jq | SQLite | QuickJS |
| :---: | :--------: | :----: | :----: | :-----: |
| WinXP | (不支持) | 7.26 s | 5.67 s | 8.93 s |
| Win10 | 3.72 s | 5.60 s | 4.26 s | 8.30 s |


对了,如果要把这 5 级(省市县乡村)的 json 数据,根据各自的外键字段,串成 json 树(如下),有啥简单快捷的办法呢?

```json
[
 {
  "code": "11",
  "name": "北京市",
  "children": [
   {
    "code": "1101",
    "name": "市辖区",
    "children": [
     "..."
    ]
   }
  ]
 },
 {
  "code": "12",
  "name": "天津市",
  "children": [
   "..."
  ]
 },
 "..."
]
```


虚拟机里 WinXP 测试各工具导出 CSV 截图:

![]( https://i.imgur.com/jccBQmu.png)


Win10 测试各工具导出 CSV 截图:

![]( https://i.imgur.com/rbTKWNI.png)
这个 json 转换不对呀:

```json
[{"a": 1, "b": [2, 3, 4]}, {"a": 5, "c": 6}]
```

有两个问题:

1. 第一行的 b 数组消失了,变成了 2
2. 第二行的 c 没有解析
319 天前
回复了 simman 创建的主题 程序员 如何解决 Dart 解析大 Json 文件慢
你要存啥呢?用个普通数据库也不错呀。。

比如,SQLite 解析 JSON 也挺快:

```
sqlite> .timer on
sqlite> SELECT json_array_length(readFile('large-file.json'));
11351
Run Time: real 0.089 user 0.046875 sys 0.046875
```
320 天前
回复了 faketemp 创建的主题 分享创造 Json 数据通用提取工具[离线]
@faketemp #8 既然都是 Win7 了,为啥 jq/dsq/fx 跑不起来呢?

看了下,jq 还是纯 C 写的,xp 跑也没啥压力吧。。


至于 jq 兼容性较差,json 识别出错,是 json 文件不标准吗?或者说是 json5 ?

按理说,专门处理 json 的工具,识别不了 json ,是会贻笑大方的,应该不至于


另外,有试过打包 python 环境吗?有大佬甚至能打包完整 PyQT5 环境,并分发。(不是 PyInstaller)

链接: https://www.zhihu.com/question/48776632/answer/2336654649

看起来,打包 pandas 应该也不会太难?
你给点工具的应用场景出来呗?

比如,音视频处理?文本处理?结构数据处理?……
@lisongeee #5 python 有个类似的,pdm ,也支持整台电脑每个包只保留一份,然后通过软链接引用啥的。

但不清楚能不能多版本共存。。
321 天前
回复了 ohayoo 创建的主题 Python 菜鸟又来求助 pandas 了
@Drahcir #13 pandas 用的不多,可以评估下 11 楼的效率吗?
321 天前
回复了 yaott2020 创建的主题 Linux 请诸位 Linux 用户泼醒我
@yaott2020 #4 装个双系统呗,现在固态这么便宜
@OutOfMemoryError #11 应该有不少是索引吧
323 天前
回复了 Authorization 创建的主题 程序员 有没有那种可以和老外沟通的聊天室
抖音上有些英语聊天室,刚开始可以去这试一试。很多都是中国人,更容易听懂些
@Huelse #60 对呀,不是说,机器便宜,程序猿贵吗?

花这么多工时重构,足够加多少机器了都。。
@alexapollo #6 加油!期待明年能见到你司的 Windows 、Office 、Oracle 、Matlab 、PhotoShop 、……
做个 12306 出来看看?
325 天前
回复了 ohayoo 创建的主题 Python 菜鸟又来求助 pandas 了
试着写了一个好懂一些的:

*( V 站排版会吃掉行首空格,所以替换成了全角空格。若要使用,注意替换)*

```python
import re
import pandas as pd

df1 = pd.DataFrame({
  'id': [1, 2],
  'isp': ['电信', '电信'],
  'regions': ['广东', '上海'],
  'answers': [
    'xxx.xxx.com.\nxxx.xxx.xxx.com.\n1.1.1.1 中国深圳电信\n2.2.2.2 中国深圳电信\n',
    'xxx.xxx.com.\nxxx.xxx.xxx.com.\n3.3.3.3 中国上海电信\n4.4.4.4 中国上海电信\n',
  ],
})

df2 = pd.DataFrame({
  'Age': [13, 0, 20, 25],
  'ip': [
    '1.1.1.1',
    '2.2.2.2',
    '3.3.3.3',
    '4.4.4.4',
  ],
  'status_code': [200, 403, 200, 200],
})

df_ip = (
   df1
  .set_index('id')['answers'].str
  .extractall(r'^(?P<ip>[^\s]+)', flags=re.M)
  .reset_index(level='id')
  .set_index('ip')
)

df_result = (
   df2
  .merge(df_ip, how='left', on='ip')
  .groupby('id')
  .agg({
    'ip': '\n'.join,
    'Age': lambda s: '\n'.join(s.astype('string')),
    'status_code': lambda s: '\n'.join(s.astype('string')),
  })
  .merge(df1, how='left', on='id')[[
    'answers',
    'ip',
    'Age',
    'status_code',
  ]]
)
```
@Moeblack #9 好像你没提到必须用正则实现?
问一个正则看看?

要求能去除 PHP 、js 里的所有注释,但不要误伤字符串。具体包括:

1. 三种引号(''、""、``),以及 HereDoc (<<<EOF )、NowDoc (<<<'EOF'),且允许字符串里有转义符

2. 三种注释(#、//、/* */)
@nikenidage1 #41 有可执行文件体验吗?

那个折线图是定制过的吗?

可以 70 万个子窗体、列表框子项之类的吗?
27 MB ,快赶上 QT 了。。

另外,占用 100 MB 内存,快赶上 Electron 应用了。。
327 天前
回复了 iamfenges 创建的主题 MySQL 请教一下 clickhouse 的使用问题
@weijancc #20 好奇你原来的 SQL 是啥? 50W 数据量要 7 秒?
328 天前
回复了 la0wei 创建的主题 Python Python + mysql 多条相似 sql 语句查询如何加速?
@la0wei #21

## 1. MySQL 提升巨大

回头看了看,突然发现,会不会是你的索引不是覆盖索引,所以取整行数据时(你 SELECT * 了),都要回表去取?

恐怖地说,你回表了 180W 次?*(当然,其中应该有很多都被 MySQL 缓存下来了,实际没有去硬盘读取)*

## 2. SQLite 用了内存数据库,还是很慢

> 用 sqlite 读数据库文件进内存查询,速度不够快,单条查询在 0.5S 的样子,是因为读取数据时没有读取索引吗

那估计就是索引不对了。没看到具体代码,只能这么猜。

> 早上测试多个查询,初始需要读取整个数据库,首次查询较慢,后面速度就快多了。不过速度似乎是没有 mysql 快的,索引的效果看来是很好的

不知道你的**等价**表结构、索引、查询语句,不好判断。

我印象中,本地非并发写场景,SQLite 一般可以比 MySQL 快几倍,甚至 10 倍都有。

*(我有个 [关于树形结构存储的帖子]( https://v2ex.com/t/889443#reply21) 有这两者的速度对比)*

## 3. sqlite 读入内存查询和常规的方法速度比较

我把 16 楼的代码改造了下,随机生成完 1 亿行数据后,保存到机械硬盘(文件大小 2.12 GB )。

然后关闭内存数据库,再重新打开机械硬盘上的数据库文件,查询 2000 行 9 个字段。结果用了 48 秒。( SQLite 内存缓存大小,是默认的 2 MB )

所以,真没必要用内存数据库。占内存大( 2.5 GB ),也没提速多少。

这也是一般情况下,对于你的需求,我目前能想出的办法,一分钟统计一亿行左右。
1 ... 2  3  4  5  6  7  8  9  10  11 ... 27  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2053 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms · UTC 16:00 · PVG 00:00 · LAX 09:00 · JFK 12:00
Developed with CodeLauncher
♥ Do have faith in what you're doing.