[英]How to use python to read a text file into a csv by picking certain parts
我有一个看起来像这样的文本文件:
目前职位:
仪表工程师
当前工资:
30,000 英镑
经验:
2年
理想位置:
不提供
期待的职位:
智能电表工程师
期望薪水:
30,000 英镑
工作类型:
永久 | 合同 | 温度
目前职位:
双燃料智能电表工程师
当前工资:
30,000 英镑
经验:
4年
理想位置:
不提供
期待的职位:
不提供
期望薪水:
34,999 英镑
工作类型:
永久 | 合同 | 温度
每行都用新行分隔,数据集用空格分隔我想使用 python 来提取标题下的数据。 例如:当前职位:仪表工程师将 go 在当前职位列中。 然后抓住下一组并将它们放在下一行
如何使用 python 实现这一目标?
我是 python 的新手。 我所能做的就是读取文件。 使用 IF 挑选数据不起作用。
f = open("test.txt", "r")
lines = f.readlines()
for line in lines:
print(line)
import csv
with open('test.csv', 'rU') as infile:
reader = csv.DictReader(infile)
data = {}
for row in reader:
for header, value in row.items():
try:
data[header].append(value)
except KeyError:
data[header] = [value]
在将数据转换为csv
格式之前,您首先需要重组数据。
尝试这个:
import csv
from collections import OrderedDict
with open('data.txt', 'r') as data, open('output.csv', 'w') as file:
rows = data.read().split('\n\n')
output = [
OrderedDict(
(k.rstrip(':'), v) for k, v in zip(row.split('\n')[::2], row.split('\n')[1::2])
)
for row in rows
]
writer = csv.DictWriter(file, fieldnames=output[0].keys(), lineterminator='\n')
writer.writeheader()
writer.writerows(output)
Output:
Current job title,Current salary,Experience,Desired location,Desired job title,Desired salary,Job Type
meter engineer,"£30,000",2 years,Not supplied,smart meter engineer,"£30,000",Permanent | Contract | Temp
dual fuel smart meter engineer,"£30,000",4 years,Not supplied,Not supplied,"£34,999",Permanent | Contract | Temp
请注意,您需要使用OrderedDict
,因为字典对象在 python 2.7 上没有排序,并且会给您的csv
文件带来麻烦。 相关的伪OrderedDict
理解受到这个答案的启发: Is there an OrderedDict comprehension?
作为旁注 - Python 2.7 正在落伍。 您真的应该考虑将您的项目移至 Python 3.x 基础。
此代码是基本的,但它可能只是解决问题。 它所做的只是读取找到的那一行,上面有数据。 它知道哪条线在,因为它完全假设它的这个例子。
f = open("test.txt", "r")
if f.mode == 'r':
repeat = f.find('Current job title:') #this give how many times 'Current job title is found in the program'
while repeat >= 1:
repeat = repeat - 1 #changes repeat by -1 every time you do this counting how many times you run this loop
print("Job Title:") #Finds and sets JobTitle to the title of job stated
JobTitle = f.readline(repeat * 15 - 13)
print(JobTitle) #Prints Job Title
print("Current salary:") #Repeat from Above
Pay = f.readline(repeat * 15 - 11)
print(Pay)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.