繁体   English   中英

将txt提取转换为CSV

[英]Convert txt extract to CSV

嗨,我想从 txt 文件中提取表格并将其发送到 csv 文件。 我已经制定了一个脚本来提取表格,但我无法将其转换为正确的格式。

cc = "March TXT format BRA.txt"
title = ""
i = 0

fields = [
    "Gender",
    "InPat St",
    "Admits",
    "Trans In",
    "Disch",
    "Deaths",
    "Tran Out",
    "InPat End",
    "Leave Days",
    "Day Only",
    "Births",
    "No Babies",
    "Baby Days",
    "Bed Days",
    "Location",
    "Location2",
    "Date",
]

with open(cc) as data:
    lines = data.readlines()[2:27]
    title = lines[0].strip()
    for line in lines:
        line = line.split()
        if len(line) == 14:
            if line[0] != "Total":
                if i < 2:
                    line += ["Ward: Rehabilitation - A Ward"]
                    line += ["Braeside Hospital"]
                    line.append(title)
                else:
                    if i < 4:
                        line += ["Ward: Palliative Care - B Ward"]
                        line += ["Braeside Hospital"]
                        line.append(title)
                    else:
                        line += ["Ward: Aged Care Psychiatric - C Ward"]
                        line += ["Braeside Hospital"]
                        line.append(title)
                i += 1
                print(line)

结果如下:

['Female', '17', '19', '0', '22', '0', '0', '14', '0', '1', '0', '0', '0', '479', 'Ward: Rehabilitation - A Ward', 'Braeside Hospital', 'March 2021']
['Male', '15', '16', '0', '13', '0', '0', '18', '0', '0', '0', '0', '0', '497', 'Ward: Rehabilitation - A Ward', 'Braeside Hospital', 'March 2021']
['Female', '10', '7', '0', '3', '10', '0', '4', '1', '0', '0', '0', '0', '253', 'Ward: Palliative Care - B Ward', 'Braeside Hospital', 'March 2021']
['Male', '7', '17', '0', '3', '13', '0', '8', '2', '0', '0', '0', '0', '211', 'Ward: Palliative Care - B Ward', 'Braeside Hospital', 'March 2021']
['Female', '6', '4', '0', '4', '0', '0', '6', '0', '0', '0', '0', '0', '149', 'Ward: Aged Care Psychiatric - C Ward', 'Braeside Hospital', 'March 2021']
['Male', '9', '5', '0', '5', '0', '0', '9', '0', '0', '0', '0', '0', '304', 'Ward: Aged Care Psychiatric - C Ward', 'Braeside Hospital', 'March 2021']

我想将这些添加到 csv 文件中,我正在努力这样做。

谢谢您的帮助。

这在 Stackoverflow 上出现过很多次。

您可以将行转换为字符串

row = ','.join(line)

然后你可以保存在文件中

f.write(row + '\n')

你可以在你的for循环中做到这一点

或者,如果您将所有行保留在列表中,那么您可以在最后执行此操作

data = [
    ['Female', '17', '19', '0', '22', '0', '0', '14', '0', '1', '0', '0', '0', '479', 'Ward: Rehabilitation - A Ward', 'Braeside Hospital', 'March 2021'],
    ['Male', '15', '16', '0', '13', '0', '0', '18', '0', '0', '0', '0', '0', '497', 'Ward: Rehabilitation - A Ward', 'Braeside Hospital', 'March 2021'],
    ['Female', '10', '7', '0', '3', '10', '0', '4', '1', '0', '0', '0', '0', '253', 'Ward: Palliative Care - B Ward', 'Braeside Hospital', 'March 2021'],
    ['Male', '7', '17', '0', '3', '13', '0', '8', '2', '0', '0', '0', '0', '211', 'Ward: Palliative Care - B Ward', 'Braeside Hospital', 'March 2021'],
    ['Female', '6', '4', '0', '4', '0', '0', '6', '0', '0', '0', '0', '0', '149', 'Ward: Aged Care Psychiatric - C Ward', 'Braeside Hospital', 'March 2021'],
    ['Male', '9', '5', '0', '5', '0', '0', '9', '0', '0', '0', '0', '0', '304', 'Ward: Aged Care Psychiatric - C Ward', 'Braeside Hospital', 'March 2021'],
]

with open('output1.csv', 'w') as f:
    for line in data:
        f.write(','.join(line) + '\n')

但是 iw 使用标准模块csv会更安全 - 因为有时文本可能有逗号,或换行\n或其他可能需要使用" "或其他方法来创建安全数据的字符。

您可以在循环中执行此操作,也可以在最后使用writerow与每个 `line 分开

import csv

data = [ ...lines... ]

with open('output.csv', 'w') as f:
    csv_writer = csv.writer(f)
    for line in data:
        csv_writer.writerow(line)

或使用writerows (最后带有 char s )一次写入

with open('output.csv', 'w') as f:
    csv_writer = csv.writer(f)
    csv_writer.writerows(data)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM