我有一些非常大的文本文件需要处理,最大的是大约60GB.
每行在七个字段中有54个字符,我想从前三个字段中删除最后三个字符 - 这应该将文件大小减少大约20%.
我是Python的新手,并且有一个代码可以按照每小时大约3.4 GB的速度完成我想做的事情,但是我需要获得至少10 GB /小时的有价值的练习 - 有没有办法加速这个?这段代码并没有接近挑战我的处理器,所以我做了一个没有受过教育的猜测,它受到内部硬盘读写速度的限制?
def ProcessLargeTextFile():
r = open("filepath", "r")
w = open("filepath", "w")
l = r.readline()
while l:
x = l.split(' ')[0]
y = l.split(' ')[1]
z = l.split(' ')[2]
w.write(l.replace(x,x[:-3]).replace(y,y[:-3]).replace(z,z[:-3]))
l = r.readline()
r.close()
w.close()
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.我在Windows 7上使用IDLE Python GUI并拥有16GB的内存 - 也许一个不同的操作系统会更有效率?
编辑:这是要处理的文件的摘录.
70700.642014 31207.277115 -0.054123 -1585 255 255 255
70512.301468 31227.990799 -0.255600 -1655 155 158 158
70515.727097 31223.828659 -0.066727 -1734 191 187 180
70566.756699 31217.065598 -0.205673 -1727 254 255 255
70566.695938 …
Run Code Online (Sandbox Code Playgroud) 我有两条线在一点交叉.我知道这两行的终点.如何计算Python中的交叉点?
# Given these endpoints
#line 1
A = [X, Y]
B = [X, Y]
#line 2
C = [X, Y]
D = [X, Y]
# Compute this:
point_of_intersection = [X, Y]
Run Code Online (Sandbox Code Playgroud) 到目前为止,我一直在使用循环来为D3可视化添加线元素,但这似乎并不符合API的精神.
假设我有一些数据,
var data = {time: 1, value: 2, value2: 5, value3: 3,value4: 2},
{time: 2, value: 4, value2: 9, value3: 2,value4: 4},
{time: 3, value: 8, value2:12, value3: 2,value4:15}]);
Run Code Online (Sandbox Code Playgroud)
我想要四行,时间作为所有4的X.
我可以这样做:
var l = d3.svg.line()
.x(function(d){return xScale(d[keys[0]]);})
.y(function(d,i){
return yScale(d[keys[1]]);})
.interpolate("basis");
var l2 = d3.svg.line()
.x(function(d){return xScale(d[keys[0]]);})
.y(function(d,i){
return yScale(d[keys[2]]);})
.interpolate("basis");
var l3 = d3.svg.line()
.x(function(d){return xScale(d[keys[0]]);})
.y(function(d,i){
return yScale(d[keys[3]]);})
.interpolate("basis");
var l4 = d3.svg.line()
.x(function(d){return xScale(d[keys[0]]);})
.y(function(d,i){
return yScale(d[keys[4]]);})
.interpolate("basis");
Run Code Online (Sandbox Code Playgroud)
然后逐个添加(或循环).
var line1 = group.selectAll("path.path1")
.attr("d",l(data));
var line2 …
Run Code Online (Sandbox Code Playgroud) 如果我有一个字符串数组,例如
a = ['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)
并且我想将元素输出到每行一个文件(例如.txt).到目前为止,我有:
File.new("test.txt", "w+")
File.open("test.txt", "w+") do |i|
i.write(a)
end
Run Code Online (Sandbox Code Playgroud)
这给了我test.txt文件的一行数组.如何迭代数组,将每个值添加到文件的新行?
通常,你会使用类似的东西:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
glLineWidth(2.0f);
glVertexPointer(2, GL_FLOAT, 0, points);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_LINE_STRIP, 0, num_points);
glDisableClientState(GL_VERTEX_ARRAY);
Run Code Online (Sandbox Code Playgroud)
它在iPhone模拟器中看起来不错,但在iPhone上,线条变得非常薄,没有任何抗锯齿.
你如何在iPhone上获得AA?
如何tail
在Bash shell下使用最后一个非空行?
例如,my_file.txt
看起来像这样:
你好
hola
bonjour
(空行)
(空行)
显然,如果我这样做,tail -n 1 my_file.txt
我会得到一个空行.就我而言,我想得到bonjour
.我怎么做?
如何使用R从字符串中删除所有换行符(输入符号)?
我试过了gsub("\n", "", my_string)
,但它不起作用,因为换行和换行不相等.
谢谢!
从文件中获取行数的方法之一是PowerShell中的此方法:
PS C:\Users\Pranav\Desktop\PS_Test_Scripts> $a=Get-Content .\sub.ps1
PS C:\Users\Pranav\Desktop\PS_Test_Scripts> $a.count
34
PS C:\Users\Pranav\Desktop\PS_Test_Scripts>
Run Code Online (Sandbox Code Playgroud)
但是,当我有一个800 MB的大文本文件时,如何在不读取整个文件的情况下从中获取行号?
上述方法将消耗太多RAM,导致脚本崩溃或完成时间过长.
Emacs的hl-line-mode正是我需要的,但我想改变它的可怕的黄色,任何人都知道我该怎么做?
我正在玩FireMonkey,看看图形绘画是否比GDI或Graphics32(我目前选择的库)更快.
为了看它有多快,我已经进行了一些测试,但我遇到了一些奇怪的行为:
与较粗的线条相比,绘制细线(<1.5像素宽)似乎非常慢:
结果非常稳定; 一旦线宽超过1个像素宽,绘图总是变得更快.
在其他库中,似乎有单行快速算法,粗线较慢,因为首先创建了多边形,所以为什么FireMonkey反过来呢?
我主要需要单像素线,所以我应该以不同的方式画线?
测试使用以下代码运行:
// draw random lines, and copy result to clipboard, to paste in excel
procedure TForm5.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
var
i,iWidth:Integer;
p1,p2: TPointF;
sw:TStopWatch;
const
cLineCount=1000;
begin
Memo1.Lines.Clear;
// draw 1000 different widths, from tickness 0.01 to 10
for iWidth := 1 to 1000 do
begin
Caption := IntToStr(iWidth);
Canvas.BeginScene;
Canvas.Clear(claLightgray);
Canvas.Stroke.Kind := TBrushKind.bkSolid;
Canvas.Stroke.Color := $55000000;
Canvas.StrokeThickness :=iWidth/100;
sw := sw.StartNew;
// draw 1000 random lines
for I := …
Run Code Online (Sandbox Code Playgroud)