शुरू करने के लिए, मैं पायथन के बारे में बहुत कम जानता हूं। मैं एक अन्य पोस्ट में मिली एक स्क्रिप्ट का उपयोग करके एक सीएसवी को एक WAV फ़ाइल में कनवर्ट करने का प्रयास कर रहा हूं। सबसे अच्छा मैं यह बता सकता हूं कि यह मेरे द्वारा उपयोग किए जा रहे अजगर के पुराने संस्करण के लिए लिखा गया था। एक त्रुटि जो मुझे मिल रही है वह संस्करण अंतर के कारण है, मुझे यकीन नहीं है कि इसे कैसे ठीक किया जाए। दूसरी त्रुटि पाइथन के साथ मेरी अज्ञानता के कारण हो सकती है, लेकिन मुझे इसके बारे में निश्चित नहीं है।

पहली त्रुटि है:

Python\CVS-WAV2.py:44: DeprecationWarning: 'U' मोड समय के लिए बहिष्कृत है, csv.reader में मान (खुला (fname, 'U'), delimiter=','):

मुझे पता है कि पायथन 3 में 'यू' को न्यूलाइन = के साथ "कोई नहीं, '\ n', '\ r', या '\ n \ r' के साथ बदल दिया गया है। न्यूलाइन फ़ंक्शन पर पढ़ने के बाद मुझे लगता है कि "कोई नहीं "वह विकल्प है जो मुझे चाहिए।

एक बार जब मैं 'U' को newlinw=none में बदल देता हूं, तो मेरी पहली त्रुटि दूर हो जाती है, लेकिन जब मैं स्क्रिप्ट चलाता हूं तब भी मुझे निम्नलिखित मिलते हैं:

फ़ाइल "\Python\CVS-WAV2.py", पंक्ति 43, समय के लिए, csv.reader में मान (खुला(fname, newline='\n'), delimiter=','): ValueError: करने के लिए पर्याप्त मान नहीं अनपैक (अपेक्षित 2, मिला 0)

हालांकि मुझे यकीन नहीं है कि इस त्रुटि को कैसे हल किया जाए।

#!/usr/bin/python

import wave
import struct
import sys
import csv
import numpy 
from scipy.io import wavfile
from scipy.signal import resample

def write_wav(data, filename, framerate, amplitude):
    wavfile = wave.open(filename,'w')
    nchannels = 1
    sampwidth = 2
    framerate = framerate
    nframes = len(data)
    comptype = "NONE"
    compname = "not compressed"
    wavfile.setparams((nchannels,
                        sampwidth,
                        framerate,
                        nframes,
                        comptype,
                        compname))
    frames = []
    for s in data:
        mul = int(s * amplitude)
        frames.append(struct.pack('h', mul))

    frames = ''.join(frames)
    wavfile.writeframes(frames)
    wavfile.close()
    print("%s written" %(filename)) 


if __name__ == "__main__":
    if len(sys.argv) <= 1:
        print ("You must supply a filename to generate")
        exit(-1)
    for fname in sys.argv[1:]:

        data = []
        for time, value in csv.reader(open(fname, newline=None), delimiter=','):
            try:
                data.append(float(value))#Here you can see that the time column is skipped
            except ValueError:
                pass # Just skip it


        arr = numpy.array(data)#Just organize all your samples into an array
        # Normalize data
        arr /= numpy.max(numpy.abs(data)) #Divide all your samples by the max sample value
        filename_head, extension = fname.rsplit(".", 1)        
        data_resampled = resample( arr, len(data) )
        wavfile.write('rec.wav', 2000, data_resampled) #resampling at 2khz
        print ("File written succesfully !")

किसी भी तरह की सहायता का स्वागत किया जाएगा!!

0
Gambit3010 7 जिंदा 2022, 17:09
देखिए, मैंने तुमसे कहा था कि यह मेरी अनुभवहीनता है। मेरे सीएसवी के अंत में एक रिक्त रेखा हटा दी गई, और इसे ठीक कर दिया। सहायता के लिए धन्यवाद!
 – 
Gambit3010
7 जिंदा 2022, 17:24
ओह, प्रसिद्ध अनुगामी खाली रेखाएँ। किसी भी (पाठ) फ़ाइल के लिए मुश्किल हो सकता है।
 – 
9769953
7 जिंदा 2022, 17:35

1 उत्तर

सबसे बढ़िया उत्तर

आपकी CSV फ़ाइल में संभवतः रिक्त पंक्तियाँ हैं। उन पर छोड़ने का एक तरीका निम्नलिखित का उपयोग करना है:

for record in csv.reader(open(fname, newline=None), delimiter=','):
    if not record:
        continue
    time, value = record
0
9769953 7 जिंदा 2022, 17:19