想將列表轉換為逗號分隔的Python文件嗎?

2024-09-29 19:22:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个原始文件:

RollNo    Address1    City    State    ZipCode    Age    Branch    Subject    Marks1    Marks2
10000        6505 N MGM W   ROAD                                                                                  MMUMBAI CITY                   IN      46360                          77          0              0             -1          1 
10002        1721 HAZAREER DR. DR. UNIT 8                                                                         BELAGHIA                       FL      33756                          86          0              0             -1          2

在python中,如何将其转换为逗号分隔的文件:

^{pr2}$

我试图将其转换为列表,以便稍后可以将其转换为逗号分隔的字符串,并使用\t作为分隔符,但似乎无法提供所需的输出。在

我的代码是:

files_list=[[i for i in line.strip().split('    ')] for line in open('C:/Users/Vinny/Desktop/Python/file2cnvrt.txt').readlines()]

我得到的输出:

[['RollNo', 'Address1', 'City', 'State', 'ZipCode', 'Age', 'Branch', 'Subject', 'Marks1', 'Marks2'], 
['10000        6505 N MGM W   ROAD                                                                                  MMUMBAI CITY                  IN      46360                          77          0              0             -1          1'], 
['10002        1721 HAZAREER DR. DR. UNIT 8                                                                         BELAGHIA                      FL      33756                          86          0              0             -1          2']]

有人能建议吗?在


Tags: 文件branchcityagesubjectstatezipcodedr
3条回答

试试这个:

def read_file(filename):
    indices = [13, 113, 145, 153, 184, 196, 211, 225, 237, 0]
    columns = []
    data = []
    with open(filename) as f:
        lines = f.readlines()
    columns = lines[0].strip().split('    ')
    for line in lines[1:]:
        row = []
        line = line.strip()
        for i in range(len(indices) - 1):
            row.append(line[indices[i-1]:indices[i]].rstrip())
        data.append(row)
    return [columns] + data

指数是根据你给我们的数据收集的。我以为一切都是完美的。在

有几件事。首先,不要在你的列表理解中直接使用open()。在

如果要使用open(),请始终使用上下文管理器,该管理器可确保在完成文件后关闭该文件:

with open('filename..txt') as f: 
    lines = f.readlines()

第二:你会发现你的生活更容易不去操心open(),并开始使用惊人的^{} module。在

^{pr2}$

第三:您可以使用Windows USERPROFILE环境变量自动找到其位置,而不是将整个路径复制粘贴到桌面:

from pathlib import Path
import os
# os.getenv just gives you a dictionary with all the Windows environment variables 
# (such as USERPROFILE and APPDATA)
user_folder_str = os.getenv['%USERPROFILE%']
desktop_path = Path(user_folder_str)/'Desktop'
file_path = Path(user_folder_str)/'Desktop'/'my_file.txt'
lines = list(file_path.read_text().split('\n'))

第四:粘贴的示例原始文件中似乎没有任何制表符('\t')。它有4个空格(' ')。如果真是这样的话,这应该行得通:

[[i for i in line.strip().split('    ') if i] for line in lines]

注意if i部分。这可以确保任何由4个空格组成的连续集不会在列表中放入空字符串('')。在

但是,粘贴的代码(相当于上面的代码)产生了错误的结果。我想这可能是因为第二行和第三行实际上有制表符('\t')而不是4个空格。所以您需要split()同时使用4个空格和一个制表符。在

最简单的方法是用4个空格替换制表符。再次使用相同的if i以避免空字符串。在

[[i for i in line.strip().replace('\t', '    ').split('    ') if i] for line in lines]

这可能不是最优化的方法,尽管它会生成一个逗号分隔的值文件。其中FILE_IN和FILE_OUT分别是输入和输出文件的文件名。在

# Read file lines to list as values
file_in = open(FILE_IN, 'r')
lines_of_values = []
for line in file_in:
    # Split line, remove whitespace and remove empty fields
    line_values = list(filter(None, line.strip().split('    ')))
    values = [value.strip() for value in line_values]
    lines_of_values.append(values)
file_in.close()

# Open file to save comma separated values
file_out = open(FILE_OUT, 'w')
for values in lines_of_values:
    print("{:s}".format(",".join(values)), file=file_out)
file_out.close()

相关问题 更多 >

    热门问题