Geniş bir metin dosyasına (yaklaşık 44MB) sahibim ve bilgisayarımın belleğini ifşa etmeden okumak ve filtrelemeye çalışıyorum. Metin dosyası, her bir sütun farklı hava değişkenlerini temsil eden virgülle ayrılmış ve her bir satır, zaman içindeki değerlerini temsil eder. Sadece rüzgar yönünün 10 ila 100 derece olduğu satırları seçmek ve sonra bu satırları yeni bir dosyaya yazmak istiyorum (txt dosyası veya csv iyi olurdu). Ben tam bir python noob'um, bu yüzden herhangi bir yardım çok takdir edilecektir!Python'da txt dosyası okuma, bir değerin belirli bir aralık içinde yer aldığı satırları seçme, csv'ye yazma
verilerine
hd,Station Number,Year Month Day Hours Minutes in YYYY,MM,DD,HH24,MI format in Local time,Year Month Day Hours Minutes in YYYY,MM,DD,HH24,MI format in Local standard time,Year Month Day Hours Minutes in YYYY,MM,DD,HH24,MI format in Universal coordinated time,Precipitation since last (AWS) observation in mm,Quality of precipitation since last (AWS) observation value,Air Temperature in degrees Celsius,Quality of air temperature,Air temperature (1-minute maximum) in degrees Celsius,Quality of air temperature (1-minute maximum),Air temperature (1-minute minimum) in degrees Celsius,Quality of air temperature (1-minute minimum),Wet bulb temperature in degrees Celsius,Quality of Wet bulb temperature,Wet bulb temperature (1 minute maximum) in degrees Celsius,Quality of wet bulb temperature (1 minute maximum),Wet bulb temperature (1 minute minimum) in degrees Celsius,Quality of wet bulb temperature (1 minute minimum),Dew point temperature in degrees Celsius,Quality of dew point temperature,Dew point temperature (1-minute maximum) in degrees Celsius,Quality of Dew point Temperature (1-minute maximum),Dew point temperature (1 minute minimum) in degrees Celsius,Quality of Dew point Temperature (1 minute minimum),Relative humidity in percentage %,Quality of relative humidity,Relative humidity (1 minute maximum) in percentage %,Quality of relative humidity (1 minute maximum),Relative humidity (1 minute minimum) in percentage %,Quality of Relative humidity (1 minute minimum),Wind (1 minute) speed in km/h,Wind (1 minute) speed quality,Minimum wind speed (over 1 minute) in km/h,Minimum wind speed (over 1 minute) quality,Wind (1 minute) direction in degrees true,Wind (1 minute) direction quality,Standard deviation of wind (1 minute),Standard deviation of wind (1 minute) direction quality,Maximum wind gust (over 1 minute) in km/h,Maximum wind gust (over 1 minute) quality,Visibility (automatic - one minute data) in km,Quality of visibility (automatic - one minute data),Mean sea level pressure in hPa,Quality of mean sea level pressure,Station level pressure in hPa,Quality of station level pressure,QNH pressure in hPa,Quality of QNH pressure,#
hd, 40842,2000,03,20,10,50,2000,03,20,10,50,2000,03,20,00,50, ,N, 25.7,N, 25.7,N, 25.6,N, 21.5,N, 21.5,N, 21.4,N, 19.2,N, 19.2,N, 19.0,N, 67,N, 68,N, 66,N, 13,N, 9,N,100,N, 4,N, 15,N, ,N,1018.6,N,1017.5,N,1018.6,N,#
hd, 40842,2000,03,20,10,51,2000,03,20,10,51,2000,03,20,00,51, 0.0,N, 25.6,N, 25.8,N, 25.6,N, 21.5,N, 21.6,N, 21.5,N, 19.2,N, 19.4,N, 19.2,N, 68,N, 68,N, 66,N, 11,N, 9,N,107,N, 11,N, 13,N, ,N,1018.6,N,1017.5,N,1018.6,N,#
hd, 40842,2000,03,20,10,52,2000,03,20,10,52,2000,03,20,00,52, 0.0,N, 25.8,N, 25.8,N, 25.6,N, 21.7,N, 21.7,N, 21.5,N, 19.5,N, 19.5,N, 19.2,N, 68,N, 69,N, 66,N, 11,N, 9,N, 83,N, 13,N, 13,N, ,N,1018.6,N,1017.5,N,1018.6,N,#
bu
import csv
with open("X:\hd_040842_2000_03.txt") as input, open("X:\wanted.txt", "w") as wanted, open("X:\unwanted.txt", "w") as unwanted:
reader = csv.DictReader(input, delimiter=",")
fieldnames = reader.fieldnames
writer_wanted = csv.DictWriter(college, fieldnames, delimiter=",")
writer_unwanted = csv.DictWriter(adult, fieldnames, delimiter=",")
writer_wanted.writeheader()
writer_unwanted.writeheader()
for row in reader:
if float(row["Wind (1 minute) direction in degrees true"]) > 10.0 and float(row["Wind (1 minute) direction in degrees true"]) < 110.0:
writer_college.writerow(row)
else:
writer_adult.writerow(row)
Yani bildiğiniz bir NULL BYTE hata mesajı üretir tutar benim en iyi koddur numunesi, Elimden gelen olabilir bu kodu adapte Bu gönderi Use Python to select rows with a particular range of values in one column
Lütfen metin dosyanızın bir bölümünü ve denediğiniz kodu yazınız! – Signal
Ayrıca bir stackoverflow noob olduğunu görüyorum. Her ikisi de iyiler; noobs burada bekliyoruz! Fakat iyi bir cevap almak istiyorsanız, sorunuzda daha fazla ayrıntıya ihtiyacınız var. Sinyal önerildiği gibi, en azından bir kod oluşturmaya çalışmalısınız. Ayrıca, metin dosyanızın ne olduğunu bilmemiz gerekiyor. Bir başlık var mı? Bazı sütun dizeleri mi yoksa hepsi sayısal mu? 44 MB'ı belleğe sığdırmayacak mısın? Bu detayların herhangi bir cevap üzerinde büyük etkileri olacaktır. – Mike
Oldukça düz ileri. Csvs okuma ve yazma örnekleri bulun. Okuyucuda satır için bir döngü olmalı: '(readlines' yapmakta kötü olanlardan kaçının). Satırları okurken, istediğiniz satır öğesinin durumunu kontrol edip kötü olanları atlarsınız. – tdelaney