Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在文件的行首添加符号(#!)_Python_Bash_File - Fatal编程技术网

Python 在文件的行首添加符号(#!)

Python 在文件的行首添加符号(#!),python,bash,file,Python,Bash,File,我有一些文件,前三行只是一个标题。但要让我阅读它们,它们需要在开头添加一个注释符号,如。 如果我的文件名为test.txt(如下所示示例),如何仅在前三行添加,如果可能,如果已经有,如何不添加注释符号 在前三行之后,我有了我的实际数据。因此,我希望它是: #A B C D #1 2 3 4 # 131 4.32 23 42 132 4.31 22 42 ... ... ... ... 因此,我可以轻松地使用python中的np.loadtxt

我有一些文件,前三行只是一个标题。但要让我阅读它们,它们需要在开头添加一个注释符号,如
。 如果我的文件名为
test.txt
(如下所示示例),如何仅在前三行添加
,如果可能,如果已经有
,如何不添加注释符号

在前三行之后,我有了我的实际数据。因此,我希望它是:

#A    B    C    D
#1    2    3    4
#
131  4.32  23  42
132  4.31  22  42
...  ...  ... ...
因此,我可以轻松地使用python中的
np.loadtxt('test.txt')
加载数据。 我的想法是,在bash中这将是最简单的,但是python也可以


谢谢你的帮助。

你用
bash
标记了这个问题,这样你就可以在shell中尝试这个sed-one-liner了:

sed '1,3s/^/#/' file
如果要“就地”进行更改:添加
-i

sed -i '1,3s/^/#/' file
编辑

如果已经有前导的
#
,则跳过该行:


如果要使用
awk
,这可以工作:

awk '(NR<=3 && !/^#/) {$0="#"$0} {print}' your_file
已经有一些
#

$cat s
#A B#C D
1    2    3    4
131  4.32  23  42
132  4.31  22  42

$awk'(nr使用数组中的readlines()读取文件。循环t数组并放置一个“#”在前3行前面。然后再次写出数组。pythonit的解决方案最好在提问之前做一些研究,并提出更精确的问题。干杯!我认为前面的检查遗漏了,正如OP所说,如果可能的话,如果已经有了#,就不要添加注释符号。
sed'1,3s/^[^!#/#/文件
可以工作。@fedorqui是的,谢谢。我没有看到那一行。现在更新了。很好,+1!让我理解
{/^#/!s/^/#/}
:这是否意味着如果
/^#/
s
,否则
s/^/^/#/
?@fedorqui是的,你说的。和
/foo/!d
一样。
sed '1,3{/^#/!s/^/#/}' 
awk '(NR<=3 && !/^#/) {$0="#"$0} {print}' your_file
$ cat s
A    B    C    D
1    2    3    4

131  4.32  23  42
132  4.31  22  42

$ awk '(NR<=3 && !/^#/) {$0="#"$0} {print}' s
#A    B    C    D
#1    2    3    4
#
131  4.32  23  42
132  4.31  22  42
$ cat s
#A    B  #  C    D
1    2    3    4

131  4.32  23  42
132  4.31  22  42

$ awk '(NR<=3 && !/^#/) {$0="#"$0} {print}' s
#A    B  #  C    D
#1    2    3    4
#
131  4.32  23  42
132  4.31  22  42