在Python中,如何写入带有列表的文件

In Python, how can I write to a file with a list

提问人:JefferyTheTurtle 提问时间:7/12/2023 最后编辑:JefferyTheTurtle 更新时间:7/12/2023 访问量:73

问:

我需要创建一个程序,要求用户输入文件,然后创建一个输出文件,将输入文件转换为摩尔斯电码。我的问题是,当我尝试将我的列表或任何内容输出到输出文件中时,程序完成,但文件是空白的,我复制了程序并删除了几乎所有内容,然后文件正确输出,

这是我的代码

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")
python 文件 输入 输出

评论

0赞 Iván Paradela Pérez 7/12/2023
您正在尝试编写 list1,但是当您将其写入文件时,列表 1 仍然是空的,不是吗?它不会在程序中的任何位置进行修改。
0赞 JefferyTheTurtle 7/12/2023
我忘了在'encode_word()'函数中更改它,它曾经说过fulllist.append,但我刚才编辑了它。
0赞 Kurtis Rader 7/15/2023
为什么要把这些线条分成“单词”?更不用说你的函数不是对单个单词进行编码,而是遍历输入中的每一行,并对这些行中的每个“单词”进行编码。所以函数名称具有误导性。encode_word

答:

-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(), '')list1if...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)