Python 从字符串中删除数值
我有一个2000行1列的文件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语言来解决这个问题 需要如下所示的输出
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
表示“全局”,这意味着它将在模式匹配时多次应用替换。因为我使用的是锚($
),所以该标志没有意义,我将其删除。感谢您的解释。:)