使用jq,如何将浅层对象数组的任意JSON编码转换为CSV?
这个网站上有大量的问答,涵盖了对字段进行硬编码的特定数据模型,但是这个问题的答案应该适用于任何JSON,唯一的限制是它是一个具有标量属性的对象数组(没有深/复/子对象,扁平化这些是另一个问题).结果应包含一个标题行,给出字段名称.将优先考虑保留第一个对象的字段顺序的答案,但这不是必需的.结果可以用双引号括起所有单元格,或者只包含那些需要引用的单元格(例如'a,b').
输入:
[
{"code": "NSW", "name": "New South Wales", "level":"state", "country": "AU"},
{"code": "AB", "name": "Alberta", "level":"province", "country": "CA"},
{"code": "ABD", "name": "Aberdeenshire", "level":"council area", "country": "GB"},
{"code": "AK", "name": "Alaska", "level":"state", "country": "US"}
]
Run Code Online (Sandbox Code Playgroud)
可能的输出:
code,name,level,country
NSW,New South Wales,state,AU
AB,Alberta,province,CA
ABD,Aberdeenshire,council area,GB
AK,Alaska,state,US
Run Code Online (Sandbox Code Playgroud)
可能的输出:
"code","name","level","country"
"NSW","New South Wales","state","AU"
"AB","Alberta","province","CA"
"ABD","Aberdeenshire","council area","GB"
"AK","Alaska","state","US"
Run Code Online (Sandbox Code Playgroud)输入:
[
{"name": "bang", "value": "!", "level": 0},
{"name": "letters", "value": "a,b,c", "level": 0},
{"name": "letters", "value": "x,y,z", "level": 1},
{"name": "bang", "value": …
Run Code Online (Sandbox Code Playgroud)我一直在网上寻找这个答案,似乎无法找到它.
我有一个包含以下内容的配置文件:
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6
Run Code Online (Sandbox Code Playgroud)
我想将VAR5的值从VALUE5更改为VALUE10.不幸的是,我不知道VALUE5的价值所以我无法搜索它.所以基本上我需要使用sed(或其他)将VAR5的值替换为我想要替换它的任何值.
我安装了JBoss Developer Studio,可以通过"鼠标右键项目>导出> WAR文件"创建WAR文件,但我想使用命令行将项目导出到WAR文件.
我安装了maven,这是Studio的一个要求,我读到我可以使用maven生成一个WAR文件,但我需要一个名为pom.xml的文件.当我搜索我的工作区和项目时,pom.xml丢失了.我可能需要手动创建pom.xml但我不确定如何.
我项目的目录树如下:
Siesta
??? build
? ??? classes
??? src
??? WebContent
??? extjs
??? extjs-4.2.0
??? extjs-4.2.2
??? index.jsp
??? META-INF
??? siesta
??? tests
??? WEB-INF
Run Code Online (Sandbox Code Playgroud)
如何使用命令行为Maven/JBoss项目创建WAR文件?我使用Linux并且不想创建pom.xml文件,但如果没有其他方法,那么我将使用xml文件生成war文件.
编辑:
所以jar是创建war文件的方法.我写了一个小脚本,它将为我创建一个特定目录的war文件.
#!/bin/bash
cd Siesta/WebContent/
jar -cvf ../../Siesta.war *
cd -
Run Code Online (Sandbox Code Playgroud)
然后,如果您在ubuntu中的zip实用程序或归档管理器中打开war文件,您将看到此结构
??? extjs
??? extjs-4.2.0
??? extjs-4.2.2
??? index.jsp
??? META-INF
??? siesta
??? tests
??? WEB-INF
Run Code Online (Sandbox Code Playgroud)
我必须将CD放入我想要创建一个令人讨厌的war文件的目录中.我认为使用jar的-C选项可能有更好的方法,但是当我使用"jar -cvf Siesta.war -C Siesta/WebContent*"时,它没有相同的结果.
EDIT2:
jar -cvf my-app.war myfolder/
Run Code Online (Sandbox Code Playgroud)
为了我的应用程序在TomCat上工作,我使用以下内容:
cd Siesta/WebContent
jar -cvf Siesta.war *
Run Code Online (Sandbox Code Playgroud) 我的参数确定了参数化pytest的名称.我将使用一些随机化的参数进行这些测试.为了使我在junit中的报告名称不被搞砸,我想为每个参数化测试创建一个静态名称.
可能吗?
JUnit似乎有一个参数:更改参数化测试的名称
class TestMe:
@pytest.mark.parametrize(
("testname", "op", "value"),
[
("testA", "plus", "3"),
("testB", "minus", "1"),
]
)
def test_ops(self, testname, op, value):
Run Code Online (Sandbox Code Playgroud)
我尝试覆盖request.node.name
但是我只能在测试执行期间重命名它.
我几乎肯定我需要写一个插件或夹具.您认为最好的方法是什么?
terraform/env/res/main.tf:
resource "aws_security_group" "allow_all" {
name = "allow_all"
description = "Allow all inbound traffic"
vpc_id = "${aws_vpc.main.id}"
ingress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
Run Code Online (Sandbox Code Playgroud)
terraform/mod/sec/main.tf:
resource aws_elb " elb" {
name = "elb-example"
subnets = ["${data.aws_subnet_ids.all.ids}"]
security_groups = ["${aws_security_group.allow_all.id}"] // SG
internal = false
listener = [
{
instance_port = "80"
instance_protocol = "HTTP"
lb_port = …
Run Code Online (Sandbox Code Playgroud) 我试图在 Bash 中复制这个 bash 命令,它返回每个压缩 50MB 的文件。
split -b 50m "file.dat.gz" "file.dat.gz.part-"
Run Code Online (Sandbox Code Playgroud)
我在 python 等价物上的尝试
import gzip
infile_name = "file.dat.gz"
chunk = 50*1024*1024 # 50MB
with gzip.open(infile_name, 'rb') as infile:
for n, raw_bytes in enumerate(iter(lambda: infile.read(slice), '')):
print(n, chunk)
with gzip.open('{}.part-{}'.format(infile_name[:-3], n), 'wb') as outfile:
outfile.write(raw_bytes)
Run Code Online (Sandbox Code Playgroud)
这将每个 gzip 返回 15MB。当我用枪压缩文件时,它们每个都是 50MB。
如何在 python 中拆分 gzipped 文件,以便在压缩前每个拆分的文件每个 50MB?
这两个操作之间的基本区别是什么?
someReadStream.pipe(fs.createWriteStream('foo.png'));
Run Code Online (Sandbox Code Playgroud)
VS
someReadStream.on('data', function(chunk) { blob += chunk } );
someReadStream.on('end', function() { fs.writeFile('foo.png', blob) });
Run Code Online (Sandbox Code Playgroud)
当使用请求库进行抓取时,我可以保存图片(png,bmp)等...仅使用前一种方法,而后一种方法存在相同的gibbersh(二进制)数据,但图像不会渲染.
他们有什么不同?
我有一个部署到Azure Web角色(云服务,而不是Azure Web站点)的SignalR解决方案,为了确保我们可以最大化每个实例的连接数,我需要对各种ASP.NET设置进行一些更改,如详细在这篇文章中:http://www.asp.net/signalr/overview/performance/signalr-performance#tuning
使用APPCMD进行相关更改的启动任务可以轻松更改appConcurrentRequestLimit和requestQueueLimit设置.但是,maxConcurrentRequestsPerCPU设置驻留在aspnet.config文件中,该文件无法通过相同的机制进行更改.
我尝试直接使用启动任务更新该文件(现在只是一个基本文件替换),但是在启动任务完成后似乎被Azure运行时替换,因此更改丢失了.我可以RDP进入机器并手动进行更改,因此我已经看到它可以工作,但对于我们希望按需扩展和缩小的服务而言,这是不可持续的.
有关如何在Azure环境中更改此设置的任何想法将不胜感激!
根据我的研究,我发现使用 CLI 创建一个 Aurora 集群的唯一方法是从现有快照创建一个内部有实例的实例:
1) 从现有集群创建快照
2) 从快照启动集群
3) 将实例添加到集群中
因此,我使用最新的 AWS CLI 版本运行的命令如下(以及输出):
aws rds create-db-cluster-snapshot \
--db-cluster-snapshot-identifier analytics-replica-db \
--db-cluster-identifier prodcluster
Run Code Online (Sandbox Code Playgroud)
哪个输出
{
"DBClusterSnapshot": {
"Engine": "aurora",
"SnapshotCreateTime": "2017-07-24T15:08:12.836Z",
"VpcId": "vpc-ID",
"DBClusterIdentifier": "cluster_name",
"DBClusterSnapshotArn": "arn:aws:rds:eu-west-1:aws_account:cluster-snapshot:analytics-replica-db",
"MasterUsername": "db_username",
"LicenseModel": "aurora",
"Status": "creating",
"PercentProgress": 0,
"DBClusterSnapshotIdentifier": "analytics-replica-db",
"IAMDatabaseAuthenticationEnabled": false,
"ClusterCreateTime": "2016-04-14T11:10:02.413Z",
"StorageEncrypted": false,
"AllocatedStorage": 1,
"EngineVersion": "5.6.10a",
"SnapshotType": "manual",
"AvailabilityZones": [
"eu-west-1a",
"eu-west-1b",
"eu-west-1c"
],
"Port": 0
}
}
Run Code Online (Sandbox Code Playgroud)
之后,我使用以下命令创建集群:
aws rds restore-db-cluster-from-snapshot \
--db-cluster-identifier analytics-replica-cluster \ …
Run Code Online (Sandbox Code Playgroud) 我在 SO 上浏览了一篇又一篇文章,寻找一种使用 subprocess.popen 在参数内使用引号的方法,但我似乎找不到方法。
这在命令行下工作得很好
runme.bat --include="check|check2"
Run Code Online (Sandbox Code Playgroud)
Python
#!/usr/bin/python
import sys
import subprocess
import shlex
#command_line = "./runme.sh --include=\"check|check2\""
command_line = "runme.bat --include=\"check|check2\""
arg = shlex.shlex(command_line)
arg.quotes = '"'
arg.whitespace_split = True
arg.commenters = ''
command_line_args = list(arg)
print command_line_args
command_line_process = subprocess.Popen(
command_line_args,
universal_newlines=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
line = ""
while True:
line = command_line_process.stdout.readline()
if line:
print line
break
Run Code Online (Sandbox Code Playgroud)
运行文件
echo %* >> someargs.txt
Run Code Online (Sandbox Code Playgroud)
runme.sh
#!/bin/bash
echo $@
Run Code Online (Sandbox Code Playgroud)
我听说 subprocess.call() 是解决这个问题的方法,但我希望能够在程序运行时逐行迭代子进程的输出。
编辑:
这似乎是Python中的一个错误,因为在cmd中运行runme.bat可以正常工作,在linux中运行runme.py可以正常工作,只有在Windows上运行runme.py时才能正常工作。我在这里创建了一张票。 …
python ×3
appcmd ×1
azure ×1
bash ×1
call ×1
csv ×1
file-io ×1
fixtures ×1
fwrite ×1
gzip ×1
jboss ×1
jq ×1
json ×1
linux ×1
maven ×1
node.js ×1
pom.xml ×1
popen ×1
pytest ×1
rename ×1
replace ×1
request ×1
sed ×1
siesta ×1
signalr ×1
split ×1
stream ×1
subprocess ×1
terraform ×1
war ×1
windows ×1