我一直在使用cProfile来分析我的代码,它一直很好用.我还使用gprof2dot.py来显示结果(使其更清晰).
但是,cProfile(以及到目前为止我见过的大多数其他Python分析器)似乎只在函数调用级别进行分析.当从不同的地方调用某些函数时,这会引起混淆 - 我不知道呼叫#1或呼叫#2是否占用了大部分时间.当所讨论的函数深度为六级时,这会变得更糟,从其他七个地方调用.
如何进行逐行分析?
而不是这个:
function #12, total time: 2.0s
Run Code Online (Sandbox Code Playgroud)
我想看到这样的事情:
function #12 (called from somefile.py:102) 0.5s
function #12 (called from main.py:12) 1.5s
Run Code Online (Sandbox Code Playgroud)
cProfile确实显示了总共有多少时间"转移"到父级,但是当你有一堆层和互连的调用时,这种连接又会丢失.
理想情况下,我希望有一个GUI来解析数据,然后向我显示我的源文件,每个行的总时间.像这样的东西:
main.py:
a = 1 # 0.0s
result = func(a) # 0.4s
c = 1000 # 0.0s
result = func(c) # 5.0s
Run Code Online (Sandbox Code Playgroud)
然后我就可以点击第二个"func(c)"调用来查看该调用中占用的时间,与"func(a)"调用分开.
那有意义吗?是否有任何分析库收集此类信息?我错过了一些很棒的工具吗?
我有一些肮脏的工作要做,所以Bash脚本似乎是一个不错的选择.我是Bash的新手,这种经历让我很沮丧.
文件mapfiles.txt由以下行组成.每条线有四个由白色空间隔开的段.每个段表示外部程序名称'prog'的输入参数.例如,"cm19_1.png"是文件名,"0001"是索引,"121422481"是经度,"31035995"是纬度.
文件:mapfiles.txt
cm19_1.png 0001 121422481 31035995
cm19_2.png 0002 121423224 31035995
cm19_3.png 0003 121423967 31035995
…
Run Code Online (Sandbox Code Playgroud)
我想对每一行执行类似的命令.如下所示,prog的输入参数顺序略有不同.所以编写一个bash脚本来处理重复的工作是有意义的.
[Usage] prog <index> <longitude> <latitude> <filename>
example: prog 0001 121422481 31035995 cm19_1.png
Run Code Online (Sandbox Code Playgroud)
通常,bash脚本将以这种方式运行:
这是run.sh.
#!/bin/sh
input=mapfiles.txt
cmd=prog
while read line
do
file=$(echo $line | cut -d' ' -f1)
key=$(echo $line | cut -d' ' -f2)
log=$(echo $line | cut -d' ' -f3)
lat=$(echo $line | cut -d' ' -f4)
echo $cmd $key …Run Code Online (Sandbox Code Playgroud) 我想从标准输入读取一个CSV文件并处理每一行.我的CSV输出代码逐个写入行,但我的读者在迭代行之前等待流终止.这是csv模块的限制吗?难道我做错了什么?
我的读者代码:
import csv
import sys
import time
reader = csv.reader(sys.stdin)
for row in reader:
print "Read: (%s) %r" % (time.time(), row)
Run Code Online (Sandbox Code Playgroud)
我的作家代码:
import csv
import sys
import time
writer = csv.writer(sys.stdout)
for i in range(8):
writer.writerow(["R%d" % i, "$" * (i+1)])
sys.stdout.flush()
time.sleep(0.5)
Run Code Online (Sandbox Code Playgroud)
产量python test_writer.py | python test_reader.py:
Read: (1309597426.3) ['R0', '$']
Read: (1309597426.3) ['R1', '$$']
Read: (1309597426.3) ['R2', '$$$']
Read: (1309597426.3) ['R3', '$$$$']
Read: (1309597426.3) ['R4', '$$$$$']
Read: (1309597426.3) ['R5', '$$$$$$']
Read: (1309597426.3) ['R6', …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试从我拥有的纯文本文件中读取行.我发现另一个stackoverflow(用Java读取纯文本文件)你可以使用Files.lines(..).forEach(..)但是我实际上无法弄清楚如何使用for each函数来读取line by行文本,任何人都知道在哪里寻找或如何这样做?
在perl中,我们用来<FileDescriptor>从文件中读取数据.如何使用ant脚本执行相同操作.
我会喜欢像Microsoft Visual Studio在bash中逐行调试的东西,当前的变量值等等.
有没有工具或方法可以做到这一点?set -x并且set -v很好但不完美.
我试图从连接到我的Arduino MEGA的SD卡上逐行读取文本文件"Print1.txt".到目前为止,我有以下代码:
#include <SD.h>
#include <SPI.h>
int linenumber = 0;
const int buffer_size = 54;
int bufferposition;
File printFile;
char character;
char Buffer[buffer_size];
boolean SDfound;
void setup()
{
Serial.begin(9600);
bufferposition = 0;
}
void loop()
{
if (SDfound == 0)
{
if (!SD.begin(53))
{
Serial.print("The SD card cannot be found");
while(1);
}
}
SDfound = 1;
printFile = SD.open("Part1.txt");
if (!printFile)
{
Serial.print("The text file cannot be opened");
while(1);
}
while (printFile.available() > 0)
{
character = printFile.read();
if (bufferposition …Run Code Online (Sandbox Code Playgroud) 我想git diff将常规逐行diff与结合在一起git diff --word-diff。逐行比较的问题在于,如果我更改一个或两个单词并使该行基本保持原样,则它们是不必要的-分块过于粗糙。另一方面,如果我改变整行并使用--word-diff,有时diff算法将变得混乱并吐出令人难以置信的diff,插入和删除了大量单词以将一行“变形”为另一行。
是否有一种方法可以指定git应该对此明智的方法,并且仅--word-diff在这样做确实有意义时(当然,逐行)?
我想使用 nodejs 逐行读取文件,然后在完成时将返回的结果作为 json 字符串获取。我试图这样做,但最后 console.log 打印 undefined 而不是列表。我得到了 Promise 的列表和结尾,但是如何将它返回给 main.js 中的调用函数?
我有我的 main.js 文件:
var fct = require('./romlist-parser');
console.log(fct.myfunction());
Run Code Online (Sandbox Code Playgroud)
并且 romlist-parser.js 具有以下内容:
var fs = require('fs');
var readline = require('readline');
exports.myfunction = function() {
var promise = new Promise(function(resolve,reject) {
var rd = readline.createInterface({
input: fs.createReadStream('Atari 2600.txt'),
console: false
});
var games = [];
rd.on('line', function(line) {
var arr = line.split(";");
games.push({name:arr[0], title:arr[1]});
});
rd.on('close', function() {
var json = JSON.stringify(games);
resolve(games);
});
});
promise.then((resolveResult) => {
console.log(resolveResult); …Run Code Online (Sandbox Code Playgroud) 所以这是我目前使用的代码,但我并不特别想创建自己的阅读器。我的问题是我想逐行读取一个完整的 csv 文件,但文件内容会不时发生变化,所以它必须是通用的。
这是我目前使用的
try
{
var Lines = File.ReadAllLines(path);
var csvRawData = from line in Lines select (line.Split(',')).ToArray();
var csvData = csvRawData.ToList();
return csvData;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Logger.Log(ex.Message, true);
return null;
}
Run Code Online (Sandbox Code Playgroud)
返回的 csvData 是 List 类型。然后我只是手动将内容从中分离出来。