提问人:JefferyTheTurtle 提问时间:7/12/2023 最后编辑:JefferyTheTurtle 更新时间:7/12/2023 访问量:73
在Python中,如何写入带有列表的文件
In Python, how can I write to a file with a list
问:
我需要创建一个程序,要求用户输入文件,然后创建一个输出文件,将输入文件转换为摩尔斯电码。我的问题是,当我尝试将我的列表或任何内容输出到输出文件中时,程序完成,但文件是空白的,我复制了程序并删除了几乎所有内容,然后文件正确输出,
这是我的代码
filenamer = input('Input the file you want to translate to morse code: ')
fileopenr = open(filenamer, 'r')
fileopenw = open('encoded.txt', 'w')
def convert_to_morse_code(letter):
# Convert a single letter to Morse code.
if letter == 'A':
return '.-'
elif letter == 'B':
return '-...'
elif letter == 'C':
return '-.-.'
elif letter == 'D':
return '-..'
elif letter == 'E':
return '.'
elif letter == 'F':
return '..-.'
elif letter == 'G':
return '--.'
elif letter == 'H':
return '....'
elif letter == 'I':
return '..'
elif letter == 'J':
return '.---'
elif letter == 'K':
return '-.-'
elif letter == 'L':
return '.-..'
elif letter == 'M':
return '--'
elif letter == 'N':
return '-.'
elif letter == 'O':
return '---'
elif letter == 'P':
return '.--.'
elif letter == 'Q':
return '--.-'
elif letter == 'R':
return '.-.'
elif letter == 'S':
return '...'
elif letter == 'T':
return '-'
elif letter == 'U':
return '..-'
elif letter == 'V':
return '...-'
elif letter == 'W':
return '.--'
elif letter == 'X':
return '-..-'
elif letter == 'Y':
return '-.--'
elif letter == 'Z':
return '--..'
else:
return ''
list1 = []
def encode_word():
print(fileopenr)
for line in fileopenr:
for word in line.split():
word = word.upper()
for letter in word:
lists = list(letter)
for letters in lists:
list1.append(convert_to_morse_code(letters))
encode_word()
print(list1)
fileopenw.writelines(list1)
即使将文件写入的内容更改为只有一个单词,输出文件也会显示为空
fileopenw.write("apple")
答:
-2赞
zoldxk
7/12/2023
#1
filenamer = input('Input the file you want to translate to Morse code: ')
fileopenr = open(filenamer, 'r')
fileopenw = open('encoded.txt', 'w')
morse_code_dict = {
'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.', 'G': '--.',
'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.',
'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-', 'U': '..-',
'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--', 'Z': '--..'
}
def convert_to_morse_code(letter):
# Convert a single letter to Morse code.
morse_code = morse_code_dict.get(letter.upper())
return morse_code if morse_code else ''
list1 = []
def encode_word():
for line in fileopenr:
for word in line.split():
for letter in word:
list1.append(convert_to_morse_code(letter))
encode_word()
fileopenr.close() # Close the input file
morse_code = ' '.join(list1) # Convert the list to a single string
fileopenw.write(morse_code)
fileopenw.close() # Close the output file
评论
0赞
Kurtis Rader
7/15/2023
嘎!您的解决方案存在几个问题。让我们从你不需要做的事实开始——只要做。也没有必要将行拆分为单词。该数组也没有任何存在的理由。我可以继续说下去,但我想我已经表达了我的观点。解决方案的唯一可赎回方面是用字典替换 O.P. 解决方案中可怕的代码块。return morse_code if morse_code else ''
return morse_code_dict.get(letter.upper(), '')
list1
if...elif...
-1赞
Iván Paradela Pérez
7/12/2023
#2
据我所知,函数 writelines 不像列表那样工作。
我会使用上下文管理器和循环。如果您愿意,您可以调整循环以将其与您的格式一起使用。 关键是,写入只是在文件末尾附加任何内容,这意味着您必须自己管理空格和断行符。
我在这个版本中包含了空格和断行符,但如果你想让文本是一个连续的字符串,只需注释掉这两行。
morse = {
'A': '.-',
'B': '-...',
'C': '-.-.',
'D': '-..',
'E': '.',
'F': '..-.',
'G': '--.',
'H': '....',
'I': '..',
'J': '.---',
'K': '-.-',
'L': '.-..',
'M': '--',
'N': '-.',
'O': '---',
'P': '.--.',
'Q': '--.-',
'R': '.-.',
'S': '...',
'T': '-',
'U': '..-',
'V': '...-',
'W': '.--',
'X': '-..-',
'Y': '-.--',
'Z': '--..'}
filenamer = input('Input the file you want to translate to morse code: ')
def encode(file):
with open(file,'r') as f:
tmp = []
for line in f.readlines():
for word in line.split():
for letter in word.upper():
if letter in morse:
tmp.append(morse[letter])
tmp.append(' ') ## If you do not want whitespace, comment.
tmp.append('\n') ## If no linebreaks, comment
return tmp
with open('encoded.txt', 'w') as fw:
words = encode(filenamer)
for word in words:
fw.write(word)
评论
encode_word