我有一个名称带有空格的文件。我正在尝试仅使用文件的姓氏为文件中的每个名称创建文件。这是文件的示例:
<!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。
答案 0 :(得分:3)
尝试一下:
def get_last_name(name):
return "_".join(name.split()[1:])
split()
将字符串拆分为标记(以空格分隔),[1:]
选择除拆分的第一个元素以外的所有元素。然后,我们将这些元素与下划线"_"
结合在一起。
答案 1 :(得分:1)
这是使用split
和join
以及进一步切片以生成具有指定输出结构的列表的一种方法:
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"]