Python 从字符串中删除数值

Python 从字符串中删除数值,python,perl,bash,shell,Python,Perl,Bash,Shell,我有一个2000行1列的文件 1007_s_at1 1007_s_at2 1007_s_at3 1007_s_at4 1007_s_at5 1007_s_at6 1007_s_at7 1007_s_at8 1007_s_at9 1007_s_at10 如上所示,我想删除“at”之后的最后一个数值。原则上,最后一个数字应该被截断 我尝试过将它们分开,然后欢欣鼓舞,但这只会使问题复杂化,我离答案还很远 请您推荐一些bash、shell、python或perl语言来解决这个问题 需要如下所示的输出

我有一个2000行1列的文件

1007_s_at1
1007_s_at2
1007_s_at3
1007_s_at4
1007_s_at5
1007_s_at6
1007_s_at7
1007_s_at8
1007_s_at9
1007_s_at10
如上所示,我想删除“at”之后的最后一个数值。原则上,最后一个数字应该被截断

我尝试过将它们分开,然后欢欣鼓舞,但这只会使问题复杂化,我离答案还很远

请您推荐一些bash、shell、python或perl语言来解决这个问题

需要如下所示的输出

   1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at

谢谢

只需将
string.digits
传递到
.rstrip()
即可删除字符串右侧的数字:

sed -i -e 's/[[:digit:]]*$//' filename
import string
with open('inputfile') as infile, open('outputfile') as outfile:
    for line in infile:
        outfile.write(line.rstrip().rstrip(string.digits) + '\n')

只需将
string.digits
传递到
.rstrip()
即可删除字符串右侧的数字:

import string
with open('inputfile') as infile, open('outputfile') as outfile:
    for line in infile:
        outfile.write(line.rstrip().rstrip(string.digits) + '\n')

使用Perl

perl -p -e "s/\d+$//" input.txt > output.txt

使用Perl

perl -p -e "s/\d+$//" input.txt > output.txt

如果只有末端的数字发生变化,则可能会拼接:

>>> a = '1007_s_at1'
>>> a[0:9]
'1007_s_at'

如果只有末端的数字发生变化,则可能会拼接:

>>> a = '1007_s_at1'
>>> a[0:9]
'1007_s_at'

Python

只需从末尾去掉所有数字

>>> "1007_s_at10".rstrip('01234567890')
'1007_s_at'

Python

只需从末尾去掉所有数字

>>> "1007_s_at10".rstrip('01234567890')
'1007_s_at'

如果您使用的是Linux或Unix,一个简单的单行程序解决方案是:

perl -i.bak -pe 's/\d+$//g' file.txt
如果是Windows:

perl -i.bak -pe "s/\d+$//g" file.txt
如果您已经知道它在做什么,那么就很好了,否则,用非常简单的术语来说,
-i
切换
.bak
将首先创建
file.txt
的备份,并将其命名为
file.txt.bak


然后,
-p
选项将循环文件中的条目,并在
s/\d+$//g
删除最后的数字后,将输出打印/保存在
file.txt中。

如果您使用的是Linux或Unix,一个简单的单行程序解决方案是:

perl -i.bak -pe 's/\d+$//g' file.txt
如果是Windows:

perl -i.bak -pe "s/\d+$//g" file.txt
如果您已经知道它在做什么,那么就很好了,否则,用非常简单的术语来说,
-i
切换
.bak
将首先创建
file.txt
的备份,并将其命名为
file.txt.bak


然后,
-p
选项将循环文件中的条目,并在
s/\d+$//g
删除最后的数字后,将输出打印/保存在
file.txt中。

还没有人建议bash解决方案:

shopt -s extglob
while read line; do
    echo "${line%%*([0-9])}"
done < filename
shopt-s extglob
读行时;做
回显“${line%%*([0-9])}”
完成<文件名

还没有人提出bash解决方案:

shopt -s extglob
while read line; do
    echo "${line%%*([0-9])}"
done < filename
shopt-s extglob
读行时;做
回显“${line%%*([0-9])}”
完成<文件名

对于正则表达式来说,这是一个微不足道的问题。您尝试过什么?这对于正则表达式来说是一个微不足道的问题。你试过什么?嗨!有g和没有g有什么区别。sed-i-e的//[[:digit:][]*$//g'文件名谢谢
g
表示“全局”,这意味着它将在模式匹配时多次应用替换。因为我使用的是锚(
$
),所以该标志没有意义,我将其删除。感谢您的解释。:)你好有g和没有g有什么区别。sed-i-e的//[[:digit:][]*$//g'文件名谢谢
g
表示“全局”,这意味着它将在模式匹配时多次应用替换。因为我使用的是锚(
$
),所以该标志没有意义,我将其删除。感谢您的解释。:)