我正在解析一个文本文件并希望删除所有段落内换行符,同时实际保留形成新段落的双换行符。例如
这是我的第一首诗\n没有意义\n它应该走多远\n没有人知道。\n\n这里有几秒钟\n没有那么长\n再见\n\n
打印出来后,它应该是这样的:
This is my first poem
that does not make sense
how far should it go
nobody can know.
Here is a seconds
that is not as long
goodbye
Run Code Online (Sandbox Code Playgroud)
应该成为
这是我的第一首诗,没有人知道它应该走多远。\n\n这是一个没有那么长的再见\n\n
同样,打印时,它应该如下所示:
This is my first poem that does not make sense how far should it go nobody can know.
Here is a seconds that is not as long goodbye
Run Code Online (Sandbox Code Playgroud)
这里的技巧是删除 '\n' 的单次出现,同时保留双换行符 '\n\n',并保留空白(即“hello\nworld”变成“hello world”而不是“helloworld”) .
我可以通过首先用一个虚拟字符串(如“ $ $ $ ”或同样荒谬的东西)替换 \n\n ,然后删除 \n 然后将“ $ $ $ …
我有一个绘图脚本,计划作为 cron 作业运行,但抛出错误。该脚本是用Python 3.5编写的,下面给出了一个示例。
import pylab as pl
fig = pl.figure(figsize=(4, 4))
ax = fig.add_supblot(111)
ax.plot(range(10), range(10))
Run Code Online (Sandbox Code Playgroud)
我通过以下行在 bash 脚本中调用它: ~/anaconda3/bin/ipython test.py
我的 cron 报告中出现以下错误:
QXcbConnection: Could not connect to display
/datadrive/cronjobs/test.sh: line 2: 1459 Aborted (core dumped) ~/anaconda3/bin/python ~/Desktop/test.py
Run Code Online (Sandbox Code Playgroud)
我什至尝试直接从 crontab 调用,但得到了同样的错误。
我已确认可以从终端运行该脚本。这两者都有效:
$ ~/anaconda3/bin/ipython ~/Desktop/test.py
$ bash /datadrive/cronjobs/test.sh
Run Code Online (Sandbox Code Playgroud)
似乎 matplotlib 不喜欢在 cron 下运行,但我不明白为什么。有谁知道这是为什么以及如何解决它?
我将我的数据放入NASA的ICARTT格式进行存档.这是一个逗号分隔的文件,有多个标题行,标题行中有逗号.就像是:
46, 1001
lastname, firstname
location
instrument
field mission
1, 1
2011, 06, 21, 2012, 02, 29
0
Start_UTC, seconds, number_of_seconds_from_0000_UTC
14
1, 1
-999, -999
measurement name, units
measurement name, units
column1 label, column2 label, column3 label, column4 label, etc.
Run Code Online (Sandbox Code Playgroud)
我必须为收集数据的每一天制作一个单独的文件,因此我最终将创建大约30个文件.当我通过pandas.DataFrame.to_csv创建一个csv文件时,我不能(据我所知)在写入数据之前简单地将标题行写入文件,所以我不得不欺骗它来做我想做的事情
# assuming <df> is a pandas dataframe
df.to_csv('dst.ict',na_rep='-999',header=True,index=True,index_label=header_lines)
Run Code Online (Sandbox Code Playgroud)
其中"header_lines"是标题字符串
这给我的正是我想要的,除了"header_lines"被双引号括起来.有没有办法使用to_csv将文本写入csv文件的头部或删除双引号?我已经尝试在to_csv()中设置quotechar =''和doublequote = False,但双引号仍然出现.
我现在正在做什么(它现在有效,但我想转向更好的东西)只是通过打开('dst.ict','w')打开一个文件并逐行打印到该行,这是很慢.
使用整数时,有多种可用类型(例如 int、numpy.int8、numpy.int16 等)。如果我编写一个通用函数,要求一个变量为整数,我如何针对 Python/numpy 中所有可能的“整数”类型测试该类型?关于浮动也可以提出同样的问题。我最初是这么想的
isinstance(np.int64(5), int)
Run Code Online (Sandbox Code Playgroud)
会/应该起作用,但事实并非如此。
有没有办法可以测试所有可用整数类型的整数变量?
在深入研究 CUDA 编程之前,我需要先定位自己。NVIDIA CUDA 编程指南在版本 10.1 和 10.2 之间进行了明显的更改,从“CUDA C”改为“CUDA C++”。由于这是一个较小的版本更改,我怀疑这只是语义。我比较了 10.1 之前和 10.2 之后的示例代码,发现没有区别......但这并不意味着没有区别。这些版本之间是否存在更微妙的编程范式转变?
我的怀疑是:CUDA 一直是 C++ 的扩展,而不是 C,但每个人都将其称为 CUDA C,因为我们在编写 CUDA 代码时没有利用 C++ 提供的 OOP。这是一个公平的评价吗?
我一直在将IDL代码翻译成Python,并注意到最终产品的差异.这些差异也不容忽视(例如,通过IDL我获得19.03而Python获得19.16).我确认这两个脚本产生相同的值(它们通常在第四,第五或第六个十进制中不同),直到我开始执行多个数组操作.我怀疑精度可能是原因(Python和IDL数组都是type=FLOAT).我做了一个简单的实验,我也看到了很大的差异.
a = 0.01
b = 0.0
for r = 1,1000 do begin
b += a
endfor
c = a * 1000
print,b
>>> 10.0001
print,c
>>> 10.0000
Run Code Online (Sandbox Code Playgroud)
a = 0.01
b = 0.00
for r in range(1000):
b += a
c = a * 1000
print(b)
>>> 9.999999999999831
print(c)
>>> 10.0
Run Code Online (Sandbox Code Playgroud)
当然,在这个例子中,差异仍然很小,但是Python显然比IDL更接近真相.我期望结果是相同的,因为两种语言都使用FLOAT精度.底线是错误以不同的方式在两种语言中传播,从而产生不同的结果.我的问题是:
两种语言之间的精确度是否存在差异(即,在IDL中FLOAT与在Python中的意义相同,我认为它确实如此)?
有没有办法调和精度差异?
我对IDL没有多少经验; 我错过了一些明显的东西吗
当我写这篇文章时突然出现.我看到与OP相同的问题(Python是正确的).
>>> 3015/0.0002529821940697729
>>> 11917835.
Run Code Online (Sandbox Code Playgroud)
>>> 3015/0.0002529821940697729
>>> 11917834.814763514
Run Code Online (Sandbox Code Playgroud) python ×4
python-3.x ×2
bash ×1
cron ×1
csv ×1
cuda ×1
isinstance ×1
matplotlib ×1
numpy ×1
pandas ×1
precision ×1
python-2.7 ×1
regex ×1
types ×1