Python3-用下划线替换空格,但跳过第一个元素

时间:2019-04-29 15:44:16

标签: python

我有一个名称带有空格的文件。我正在尝试仅使用文件的姓氏为文件中的每个名称创建文件。这是文件的示例:

    <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>HTML</title>
</head>
<style>
    * {
  padding: 0px;
  margin: 0px;
}
.container{
  width:100%;
  height:100vh;
  /* display:flex;
  flex-direction:row;
  position:relative; */

}
#left-side{
  width:50%;
  height:100%;
  background-color:#ef0e3f;
  float: left;

}
#right-side{
  width:50%;
  height:100%;
  background-color:#0ebeef;
  float: right;

}
#clicker, #clicker2{
  width: 200px;
  height: 45px;
  line-height: 45px;
  background-color: #000;
  font-size: 20px;
  color:#fff;
  border:none;
  position:absolute;
  top:50%;
  left:50%;
  transform:translate(-50%,-50%);
  z-index: 5;
  border-radius: 3px;
  box-shadow: 2px 2px 3px 0px #2bff00, -2px -2px 3px 0px #2bff00;
}
#clicker2{
    z-index: 3;
}
</style>
<body>
<div class="container">
  <div id="left-side"></div>
  <div id="right-side"></div>
  </div>
  <button id="clicker" onclick="merge()"
  >Merge</button>
  <button id= "clicker2" onclick="split()">Split</button>
  <script>
  function merge(){
    var merged = document.getElementById('clicker').style.display='none';
    var split = document.getElementById('clicker2').style.display='block';
    var leftSideC = document.getElementById('left-side').style.width = '100%';
    var rightSideC = document.getElementById('right-side').style.display = 'none';
    return merged, split, leftSideC, rightSideC;

  }
  function split(){
    var merged = document.getElementById('clicker2').style.display='none';
    var split = document.getElementById('clicker').style.display='block';
    var merged = document.getElementById('clicker').innerHTML='Merge';
    var leftSideC = document.getElementById('left-side').style.width = '50%';
    var rightSideC = document.getElementById('right-side').style.display = 'block';
    return merged, leftSideC, rightSideC; 
  }
//   window.alert('Single click for Merge and Double click for split');
  </script>
</body>
</html>

创建的文件应采用以下格式:

Ernest Hemingway
Mark Twain
Ralph Waldo Emerson 
Edgar Allan Poe
Robert Frost

姓氏中的空格由下划线代替。替换空格时,我很难摆脱名字。这是我到目前为止的内容:

Hemingway.txt
Twain.txt
Waldo_Emerson.txt
Allan_Poe.txt

我不确定替换时如何忽略第一个“元素”。我想做的另一件事是使用split。

5 个答案:

答案 0 :(得分:3)

尝试一下:

def get_last_name(name):
    return "_".join(name.split()[1:])

split()将字符串拆分为标记(以空格分隔),[1:]选择除拆分的第一个元素以外的所有元素。然后,我们将这些元素与下划线"_"结合在一起。

答案 1 :(得分:1)

这是使用splitjoin以及进一步切片以生成具有指定输出结构的列表的一种方法:

lines = [line.rstrip('\n') for line in open('my_file.txt')]
['_'.join(i.split()[1:]) + '.txt' for i in lines]

输出

['Hemingway.txt',
 'Twain.txt',
 'Waldo_Emerson.txt',
 'Allan_Poe.txt',
 'Frost.txt']

答案 2 :(得分:1)

您可以将这个替换项与减号混合使用

my_string="Ralph Waldo Emerson"
my_string.split(" ",1)[1].replace(" ", "_")

这应该可以解决问题。 希望对您有所帮助。 BR

答案 3 :(得分:1)

使用列表推导的单行代码,其中我们忽略第一个单词,并用下划线将字符串中的所有其他单词连接起来

li = [ '_'.join(item.split()[1:])+'.txt'  for item in open('file.txt')]
print(li)

所以,如果file.txt是

Ernest Hemingway
Mark Twain
Ralph Waldo Emerson 
Edgar Allan Poe
Robert Frost

输出将为

['Hemingway.txt', 'Twain.txt', 'Waldo_Emerson.txt', 'Allan_Poe.txt', 'Frost.txt']

答案 4 :(得分:0)

这应该有效

name_list = ["Ernest Hemingway","Ralph Waldo Emerson"]
filenames = []
for name in names:
    filenames += ["_".join(name.split(" ")[1:]) + ".txt"]